MySQL INSERT 중복 데이터 처리: 무시하기와 덮어쓰기

MySQL에서 데이터를 INSERT할 때 중복 데이터가 발생하면 어떻게 처리할까요? 일반적인 시나리오로는 중복 데이터를 무시하거나, 기존 데이터를 덮어쓰는 방법이 있습니다. 이 글에서는 두 가지 방법을 설명하고, 간단한 예제 코드를 통해 활용법을 소개하겠습니다.


중복 데이터 무시하기 (IGNORE 사용)

INSERT IGNORE를 사용하면 중복 데이터가 발생할 경우 해당 행의 삽입을 건너뜁니다. 이 방법은 새 데이터가 중복으로 인해 삽입되지 않아도 에러를 발생시키지 않는 특징이 있습니다.

예제

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

-- 이미 'id=1'이 존재한다고 가정
INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice');
INSERT IGNORE INTO users (id, name) VALUES (2, 'Bob'); -- 정상 삽입

이 코드에서 id=1은 중복이 발생했으므로 무시되고, id=2는 정상적으로 삽입됩니다.


중복 데이터 덮어쓰기 (ON DUPLICATE KEY UPDATE 사용)

ON DUPLICATE KEY UPDATE를 사용하면 중복 키가 발생할 경우 기존 데이터를 업데이트합니다. 이 방법은 기존 데이터의 값을 업데이트하려는 경우 유용합니다.

예제

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10, 2)
);

-- 데이터 삽입 및 중복 발생 시 업데이트
INSERT INTO products (product_id, name, price)
VALUES (1, 'Laptop', 1000.00)
ON DUPLICATE KEY UPDATE
name = VALUES(name),
price = VALUES(price);

위 예제에서는 product_id=1이 이미 존재할 경우, name과 price 필드가 새 값으로 업데이트됩니다.


REPLACE 문을 사용한 예제

테이블 생성

CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(100),
    position VARCHAR(100)
);

REPLACE 문 사용

-- 기존 데이터를 덮어쓰거나 새로 삽입
REPLACE INTO employees (emp_id, name, position)
VALUES (1, 'Alice', 'Manager');

이 경우 emp_id=1이 이미 존재한다면 해당 행이 먼저 삭제되고, 새로운 데이터 ('Alice', 'Manager')가 삽입됩니다.


REPLACE 문과 다른 방법의 비교

  • ON DUPLICATE KEY UPDATE: 데이터 업데이트를 통해 기존 데이터 유지 가능.
  • REPLACE: 기존 데이터 삭제 후 새 데이터 삽입.

REPLACE 문은 종속성이나 트리거가 없는 테이블에서 더 적합하며, 삽입하려는 데이터가 기존 데이터를 완전히 대체해야 하는 경우 유용합니다.


 

개념 정리 및 활용

  • 중복 데이터 무시하기는 데이터를 삽입하는데 에러가 나지 않도록 하기 위해 사용됩니다. 데이터 무결성이 중요하지 않을 때 유용합니다.
  • 중복 데이터 덮어쓰기는 기존 데이터를 업데이트하려는 경우 활용됩니다. 이것은 데이터 갱신 및 유지보수에 유리합니다.