MySQL에서 INSERT문을 사용하여 테이블이 데이터를 저장할 때, Key에 해당하는 값이 테이블에 이미 존재하는 경우 아래와 같이 중복 키 에러가 발생한다. 예시 사진의 person 테이블은 PK로 phone 컬럼을 지정했다.
이런 에러가 발생하지 않도록 MySQL에서는 중복 레코드를 관리할 수 있는 몇 가지 방법(INSERT IGNORE, REPLACE INTO, INSERT INTO - ON DUPLICATE)을 제공한다. 이 글은 그 중 하나인 INSERT IGNORE에 대해 설명한다.
INSERT IGNORE
키가 중복되는 경우 데이터를 추가하지 않고 무시한다. 키가 중복되지 않은 데이터만 테이블에 추가한다.
구문
INSERT IGNORE INTO <TABLE_NAME> VALUES (...);
INSERT-INTO 사이에 IGNORE만 추가하면 기존 INSERT문과 다른 점이 없다.
사용 이유
예로 들어 INSERT문을 여러 개 실행시킬 때 하나의 INSERT문에서 중복 키 에러가 발생하면, 에러가 발생한 이후의 INSERT문 전부 다시 실행시켜야 한다. 하지만 INSERT IGNORE문을 사용하면 중복 키가 발생해도 무시하고 정상 처리되므로 나머지 데이터도 이상 없이 정상적으로 테이블에 추가할 수 있다.
예
데이터 중복 허용하지 않는 컬럼을 포함하여 테이블 하나를 생성했다.
CREATE TABLE person
(
phone VARCHAR(25),
name VARCHAR(20),
PRIMARY KEY (phone)
);
테이블에 같은 데이터를 INSERT문으로 두 번 추가해본다.
INSERT INTO person VALUES ('01022220000', 'Lee');
INSERT INTO person VALUES ('01022220000', 'Lee');
중복 키 에러가 발생했음을 알 수 있다.
이번에는 같은 데이터를 INSERT IGNORE문으로 두 번 추가해본다.
INSERT IGNORE INTO person VALUES ('01033330000', 'Kang');
INSERT IGNORE INTO person VALUES ('01033330000', 'Kang');
경고가 발생했지만, 쿼리 실행이 정상적으로 완료되었음을 알 수 있다.