MySQL에서 INSERT IGNORE 문은 기본적으로 테이블에 중복 데이터가 삽입되는 것을 방지하기 위해 사용됩니다. 일반적인 INSERT 명령 대신 INSERT IGNORE 명령을 사용하면, 삽입하려는 레코드가 기존 레코드와 중복되지 않는 경우에는 평소처럼 정상적으로 삽입됩니다. 하지만 해당 레코드가 이미 존재하는 중복 레코드라면, IGNORE 키워드는 MySQL에게 오류를 발생시키지 않고 조용히 해당 레코드를 버리도록 지시합니다.
구문
INSERT IGNORE INTO table_name(...)
여기서 table_name은 값을 삽입하고자 하는 테이블의 이름을 의미합니다.
예제
다음 예제를 보면, 오류 없이 실행되면서 동시에 중복 레코드도 삽입되지 않는 것을 확인할 수 있습니다.
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT IGNORE INTO person_tbl (last_name, first_name)
-> VALUES( 'Jay', 'Thomas');
Query OK, 0 rows affected (0.00 sec)위 예제에서 첫 번째 INSERT IGNORE 문은 새로운 레코드이므로 정상적으로 1개의 행이 삽입됩니다. 반면 두 번째 문은 동일한 값('Jay', 'Thomas')을 가진 레코드를 다시 삽입하려 하기 때문에, 오류 대신 '0 rows affected' 메시지와 함께 조용히 무시됩니다.
INSERT IGNORE 사용 시 참고 사항
INSERT IGNORE가 동작하려면 해당 테이블에 PRIMARY KEY 또는 UNIQUE 인덱스가 설정되어 있어야 합니다. 이러한 제약 조건이 없다면 MySQL은 어떤 레코드가 중복인지 판단할 수 없어 모든 데이터가 그대로 삽입됩니다. 또한 INSERT IGNORE는 단순히 중복 레코드뿐만 아니라 데이터 변환 오류(예: 잘못된 값 형식) 등 일부 오류 상황도 경고(warning)로 전환하여 무시한다는 점을 유의해야 합니다.