Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 ERROR 1062 (23000): Duplicate entry 오류가 발생하는 이유는 무엇일까요?

MySQL에서 ERROR 1062 (23000): Duplicate entry 오류는 컬럼에 UNIQUE(고유) 키 제약 조건이 설정되어 있는 상태에서, 이미 존재하는 값과 중복되는 데이터를 삽입하려고 할 때 발생합니다. 고유 키는 테이블 내에서 해당 값의 조합이 반드시 유일해야 한다는 것을 보장하기 때문에, 중복 삽입 시도는 허용되지 않습니다.

오류 재현을 위한 예제 테이블 생성

먼저 두 개의 컬럼에 복합 고유 키를 설정한 테이블을 만들어 보겠습니다.

mysql> create table DemoTable776 (
    FirstValue int,
    SecondValue int,
    unique key(FirstValue,SecondValue)
);
Query OK, 0 rows affected (0.74 sec)

위 테이블에서는 FirstValue와 SecondValue 두 값의 조합이 고유해야 합니다. 즉, 두 컬럼 중 하나라도 다르면 같은 행으로 간주하지 않습니다.

데이터 삽입 및 오류 발생 확인

이제 INSERT 명령어로 레코드를 삽입해 보겠습니다. 처음 세 개의 삽입은 성공하지만, 마지막에 기존과 동일한 조합인 (10, 20)을 다시 삽입하면 오류가 발생합니다.

mysql> insert into DemoTable776 values(10,20);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable776 values(10,40);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable776 values(40,20);
Query OK, 1 row affected (0.26 sec)
mysql> insert into DemoTable776 values(10,20);
ERROR 1062 (23000): Duplicate entry '10-20' for key 'FirstValue'

오류 메시지를 자세히 살펴보면 Duplicate entry '10-20'이라고 표시되어 있습니다. 이는 고유 키가 여러 컬럼으로 구성된 경우, MySQL이 해당 컬럼들의 값을 하이픈(-)으로 연결하여 하나의 키 값으로 취급하기 때문입니다.

삽입된 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 확인해 보겠습니다.

mysql> select *from DemoTable776;

실행 결과는 다음과 같습니다.

+------------+-------------+
| FirstValue | SecondValue |
+------------+-------------+
| 10 | 20 |
| 10 | 40 |
| 40 | 20 |
+------------+-------------+
3 rows in set (0.00 sec)

정리 및 해결 방법

결과를 보면 중복 삽입이 시도된 (10, 20)은 저장되지 않고, 유효한 3개의 레코드만 남아 있는 것을 확인할 수 있습니다.

이러한 오류를 방지하거나 처리하는 대표적인 방법은 다음과 같습니다.

  • INSERT IGNORE 사용: 중복 데이터가 있으면 오류 대신 해당 삽입을 무시하고 진행합니다.
  • REPLACE INTO 사용: 중복 키가 존재하면 기존 레코드를 삭제하고 새로운 레코드로 교체합니다.
  • ON DUPLICATE KEY UPDATE 사용: 중복 키가 발생했을 때 기존 레코드의 특정 컬럼을 업데이트하도록 지정합니다.

상황에 맞는 적절한 방법을 선택하면 UNIQUE 제약 조건의 장점을 유지하면서도 오류로 인한 작업 중단을 피할 수 있습니다.