MySQL에서 테이블을 생성하고 외래키(Foreign Key)제약 조건을 설정하다 오류를 만나게 되었다. 발생 원인과 해결 방법에 대해 알아보자.
외래키 제약 조건을 생성할 때, 데이터베이스 내에 동일한 이름의 제약 조건이 존재하여 오류가 발생했다. cartItems 테이블의 user_id 컬럼이 users 테이블의 id 컬럼을 참조하는 외래키 제약 조건을 생성하려고 할 때, 이미 같은 이름을 가진 제약 조건이 있다면 이 오류가 발생한다.
외래키 제약 조건 이름을 지을 때 중복을 피하기 위해 규칙을 설정할 수 있다.
fk_기준이 되는 테이블 명_참조키가 있는 테이블 명_참조키
예를 들어 cartItems 테이블의 user_id가 users 테이블의 id를 참조한다면, 이 외래키 제약 조건의 이름은 fk_cartItems_users_id로 지을 수 있다.
이름을 바꿔주니 오류가 사라졌다. 규칙대로 이름을 지어준다면 이름이 중복되진 않을 것 같다!
제약 조건 이름을 바꿔주고나니 이번엔 인덱스에서 중복이 발생했다. 제약 조건은 이름을 바꿔주었지만 인덱스 값은 아래와 같이 변경이 되지 않고 그대로 적용이 되어 오류가 났다.
인덱스도 마찬가지로 규칙에 맞춰 fk_cartItems_users_id_idx 이런 식으로 변경해주니 오류가 해결됐다.
Duplicate key 오류는 처음부터 이름을 신중하게 지어주는 것만으로도 충분히 예방할 수 있을 것이다. 외래키 제약 조건이나 인덱스를 생성할 때, 이미 존재하는 이름을 피하기 위한 명명 규칙을 세워두는 것이 좋을 것이다. 나중에 오류 해결하느라 시간을 다 잡하먹는 것보단 미연에 방지하는 것이 좋겠지!