MySQL에서 중복 값 삽입 시 오류 확인하기
MySQL에서 INSERT IGNORE 문을 사용하지 않고 테이블에 중복된 값을 삽입하면 어떻게 될까요? 이 글에서는 실제 예제를 통해 중복 값 삽입 시 오류가 발생하는 과정을 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
(
FirstName varchar(100)
);
Query OK, 0 rows affected (0.58 sec)2단계: 고유 인덱스(UNIQUE INDEX) 추가
MySQL 공식 문서에는 다음과 같이 명시되어 있습니다.
"IGNORE를 사용하지 않으면, 테이블의 기존 UNIQUE 인덱스 또는 PRIMARY KEY 값과 중복되는 행은 중복 키 오류(duplicate-key error)를 발생시키며 해당 문장은 중단됩니다."
따라서 FirstName 컬럼에 고유 인덱스를 추가해 보겠습니다.
mysql> alter table DemoTable add unique index(FirstName); Query OK, 0 rows affected (0.50 sec) Records: 0 Duplicates: 0 Warnings: 0
3단계: 레코드 삽입 및 오류 확인
이제 insert 명령어를 사용하여 테이블에 레코드를 삽입합니다. INSERT IGNORE를 사용하지 않았기 때문에 중복 레코드를 삽입하는 순간 오류가 화면에 표시됩니다.
mysql> insert into DemoTable values('Chris');
Query OK, 1 row affected (0.32 sec)
mysql> insert into DemoTable values('Robert');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('David');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('Robert');
ERROR 1062 (23000): Duplicate entry 'Robert' for key 'FirstName'
mysql> insert into DemoTable values('Chris');
ERROR 1062 (23000): Duplicate entry 'Chris' for key 'FirstName'
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.12 sec)실행 결과를 보면 'Robert'와 'Chris'를 다시 삽입하려고 할 때 ERROR 1062 (23000): Duplicate entry 오류가 발생한 것을 확인할 수 있습니다. 이는 고유 인덱스가 설정된 컬럼에 동일한 값이 이미 존재하기 때문입니다.
4단계: 저장된 데이터 조회
select 문을 사용하여 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 출력 결과를 반환합니다.
+-----------+ | FirstName | +-----------+ | Chris | | David | | Robert | | Sam | +-----------+ 4 rows in set (0.00 sec)
정리
INSERT IGNORE를 사용하지 않으면 UNIQUE 인덱스나 PRIMARY KEY와 중복되는 값이 삽입될 때 오류(ERROR 1062)가 발생하고 해당 INSERT 문은 즉시 중단됩니다. 반면 INSERT IGNORE를 사용하면 오류 대신 경고만 표시되며 나머지 작업은 계속 진행됩니다. 따라서 중복 데이터 허용 여부에 따라 적절한 방식을 선택하는 것이 중요합니다.