DB

[MySQL] INSERT IGNORE 사용법 완벽 가이드(데이터 중복 방지)

인생아 2025. 6. 19. 15:41
반응형

MySQL에서 데이터를 삽입할 때 가장 많이 발생하는 문제 중 하나가 중복 키 오류(Duplicate Entry)이다.
특히 기본 키나 UNIQUE 제약 조건이 설정된 테이블에 데이터를 삽입할 때
이미 존재하는 값이 들어가면 에러가 발생하고 쿼리가 중단된다.

이런 상황에서 안전하게 삽입을 시도하고, 오류가 발생해도 무시하고 넘어가고 싶을 때 사용하는 명령어
바로 INSERT IGNORE이다.

🔍 INSERT IGNORE란?

INSERT IGNORE는 MySQL에서 INSERT 문을 실행할 때 제약 조건 위반, 중복 키 오류 등의 에러를 무시하고 쿼리를 계속 진행하도록 만드는 명령어이다.

즉, 일반적인 INSERT에서는 중복된 값이 있으면 오류가 발생해 전체 쿼리가 실패하지만,
IGNORE를 사용하면 그 행만 건너뛰고 나머지 작업은 그대로 실행된다.

기본 구문

INSERT IGNORE INTO 테이블명 (컬럼1, 컬럼2, ...)
VALUES (값1, 값2, ...);
  • 중복된 기본 키나 UNIQUE 값이 있는 경우, 해당 행은 무시되고 에러 없이 쿼리가 끝난다.
  • 나머지 정상적인 행은 모두 INSERT 된다.
  •  
반응형

기본 예제 – users 테이블에 중복된 ID 삽입 시 처리

CREATE TABLE users (
  id INT PRIMARY KEY,
  name VARCHAR(50)
);

-- 기존 데이터
INSERT INTO users VALUES (1, '김철수');

-- 중복된 ID를 삽입
INSERT IGNORE INTO users (id, name) VALUES (1, '이영희'), (2, '박민수');

이 예제에서는 id = 1이 이미 존재하므로 일반 INSERT라면 에러가 발생하지만,
INSERT IGNORE를 사용하면 id = 1은 무시되고 id = 2만 정상적으로 삽입된다.

🧪 실전 예제 – 다중 행 INSERT와 함께 사용

INSERT IGNORE INTO users (id, name)
VALUES
  (3, '최지은'),
  (1, '이영희'), -- 이미 존재하는 ID
  (4, '송하늘');

중간에 중복된 값이 있어도 전체 쿼리는 멈추지 않고
나머지 정상적인 데이터는 그대로 INSERT된다.
대량 데이터 이관, 백업 복구, 사용자 등록 등에서 매우 유용하다.

INSERT IGNORE의 동작 원리

  • 중복 키 충돌 → 해당 행 무시 (에러 발생하지 않음)
  • NOT NULL 위반 → 해당 행 무시
  • 외래 키 오류 → 무시하고 넘어감
  • 제약 조건 위반 → 경고로 기록되며 삽입되지 않음

즉, 무시 가능한 범위 내에서만 삽입이 진행되고,
전체 쿼리가 중단되지 않도록 방어적인 삽입 처리를 도와주는 기능이다.

반응형

🧠 실무에서 INSERT IGNORE가 유용한 상황

  • 크롤링된 데이터 중 중복이 존재할 가능성이 있을 때
  • 기존 사용자 테이블에 중복 가입을 방지하면서 데이터 삽입 시
  • 과거 데이터를 대량 이관할 때 중복으로 인해 전체 작업이 중단되는 것을 막기 위해
  • 일회성 데이터 로그 기록 시 유효성 검증 없이 빠르게 삽입할 때
-- 데이터 정제 없이 수집 로그 기록
INSERT IGNORE INTO access_logs (ip, action, created_at)
VALUES ('192.168.0.1', 'visit', NOW());

🔄 INSERT IGNORE vs INSERT vs REPLACE 비교

항목 INSERT INSERT IGNORE REPLACE
중복 키 처리 에러 발생 무시하고 진행 기존 데이터 삭제 후 새로 삽입
속도 빠름 빠름 + 안전 삭제 후 삽입이라 느릴 수 있음
용도 일반 삽입 에러 방지용 삽입 기존 데이터 덮어쓰기
위험성 낮음 매우 낮음 데이터 손실 가능성 있음
 
반응형

⚠️ 주의사항

  • INSERT IGNORE는 데이터가 실제로 삽입되지 않더라도 성공한 것처럼 보일 수 있기 때문에, 반드시 영향을 받은 행 수를 확인하는 것이 좋다.
  • 중복 여부를 판단하는 키 또는 제약 조건이 없다면 IGNORE는 아무 효과도 없다.
  • REPLACE와 혼동하지 말 것. REPLACE는 기존 데이터를 삭제한 후 새로 삽입하기 때문에 PK 외의 컬럼 값이 유실될 수 있다.

INSERT IGNORE 트랜잭션과 함께 사용하기

SET autocommit = 0;
START TRANSACTION;

INSERT IGNORE INTO users (id, name) VALUES (5, '김나현');
INSERT IGNORE INTO users (id, name) VALUES (1, '김철수'); -- 중복 무시

COMMIT;

트랜잭션 안에서도 INSERT IGNORE는 정상 동작하며, 전체 쿼리 흐름을 중단시키지 않는다.

📌 요약

  • INSERT IGNORE는 데이터 삽입 시 발생할 수 있는 오류를 무시하고 안전하게 진행할 수 있는 MySQL 전용 기능이다.
  • 중복된 키나 제약 조건 위반이 있어도 전체 쿼리가 중단되지 않아 실무에서 매우 자주 사용된다.
  • 로그 수집, 크롤링, 백업 복구, 데이터 마이그레이션 등에 최적화된 삽입 방식이다.
  • 반드시 중복 무시 여부를 확인할 수 있는 키나 제약 조건이 테이블에 존재해야 한다.

📎 공식 문서 참고

MySQL INSERT IGNORE 공식 문서
https://dev.mysql.com/doc/refman/8.0/en/insert.html

반응형