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 문은 종속성이나 트리거가 없는 테이블에서 더 적합하며, 삽입하려는 데이터가 기존 데이터를 완전히 대체해야 하는 경우 유용합니다.
개념 정리 및 활용
- 중복 데이터 무시하기는 데이터를 삽입하는데 에러가 나지 않도록 하기 위해 사용됩니다. 데이터 무결성이 중요하지 않을 때 유용합니다.
- 중복 데이터 덮어쓰기는 기존 데이터를 업데이트하려는 경우 활용됩니다. 이것은 데이터 갱신 및 유지보수에 유리합니다.
'IT > 데이터베이스' 카테고리의 다른 글
MyBatis에서 update 또는 insert 후 키 값을 리턴받는 방법 (0) | 2025.04.07 |
---|---|
MySQL에서 JSON 필드 사용하기 (0) | 2025.03.31 |
MyBatis에서 INSERT 성공 여부 확인하기 (2) | 2025.03.28 |