티스토리 뷰

반응형

해당 에러는 FK 로 묶으려고 하는 테이블의 문제가 아닌 기존의 테이블의 Unique Key, Primary Key 가 설정되어 있지 않은 경우 발생하는 에러입니다. 

예를 들어 다음과 같이 테이블이 2개가 존재한다고 가정해봅니다.

create table A (
    keycolumn1 bigint not null auto_increament,
    created_at datetime(6),
    primary key (keycolumn1)
)

create table B (
    keycolumn2 bigint not null auto_increment,
    foreign bigint,
    created_at datetime(6)
)

alter table B
   add constraint fk_b_to_a
      foreign key (foreign)
         references A (keycolumn1)

 

위의 쿼리의 경우는 A 테이블이 생성된 후 B 테이블을 생성하면서 A의 Primary Key 인 keycolumn1 컬럼에 B 테이블의 foreign 컬럼을 바인딩하는 쿼리입니다. 이 경우는 정상적으로 매핑이 되지만 다음과 같은 경우는 1822 에러 코드가 발생하며 FK 제약조건 생성에 실패합니다. 

 

create table A (
    keycolumn1 bigint not null auto_increament,
    created_at datetime(6)
)

create table B (
    keycolumn2 bigint not null auto_increment,
    foreign bigint,
    created_at datetime(6)
)

alter table B
   add constraint fk_b_to_a
      foreign key (foreign)
         references A (keycolumn1)

 

참고: https://stackoverflow.com/questions/43511183/mysql-error-1822-failed-to-add-foreign-key-constraint-missing-index-for-contra

 

MySQL Error 1822: Failed to add foreign key constraint; missing index for contraint BUT index exists

I am trying to add an foreign key to my flightschedule table but it fails, but I do not really know why. The foreign key should reference the txtAC_tag attribute from the tblAircraft table which is...

stackoverflow.com

 

반응형
댓글
공지사항