[MySQL] "Duplicate key" 오류 해결

방울·2024년 5월 30일
0
post-thumbnail

MySQL에서 테이블을 생성하고 외래키(Foreign Key)제약 조건을 설정하다 오류를 만나게 되었다. 발생 원인과 해결 방법에 대해 알아보자.

🚨 ERROR: 121 Duplicate key on write or update

외래키 제약 조건을 생성할 때, 데이터베이스 내에 동일한 이름의 제약 조건이 존재하여 오류가 발생했다. cartItems 테이블의 user_id 컬럼이 users 테이블의 id 컬럼을 참조하는 외래키 제약 조건을 생성하려고 할 때, 이미 같은 이름을 가진 제약 조건이 있다면 이 오류가 발생한다.

외래키 제약 조건 이름을 지을 때 중복을 피하기 위해 규칙을 설정할 수 있다.

fk_기준이 되는 테이블 명_참조키가 있는 테이블 명_참조키

예를 들어 cartItems 테이블의 user_id가 users 테이블의 id를 참조한다면, 이 외래키 제약 조건의 이름은 fk_cartItems_users_id로 지을 수 있다.

이름을 바꿔주니 오류가 사라졌다. 규칙대로 이름을 지어준다면 이름이 중복되진 않을 것 같다!

🚨 ERROR 1061: Duplicate key name 'book_id_idx’

제약 조건 이름을 바꿔주고나니 이번엔 인덱스에서 중복이 발생했다. 제약 조건은 이름을 바꿔주었지만 인덱스 값은 아래와 같이 변경이 되지 않고 그대로 적용이 되어 오류가 났다.

인덱스도 마찬가지로 규칙에 맞춰 fk_cartItems_users_id_idx 이런 식으로 변경해주니 오류가 해결됐다.

Duplicate key 오류는 처음부터 이름을 신중하게 지어주는 것만으로도 충분히 예방할 수 있을 것이다. 외래키 제약 조건이나 인덱스를 생성할 때, 이미 존재하는 이름을 피하기 위한 명명 규칙을 세워두는 것이 좋을 것이다. 나중에 오류 해결하느라 시간을 다 잡하먹는 것보단 미연에 방지하는 것이 좋겠지!

profile
방울방울

0개의 댓글