mysql에서는 다양한 방법의 중복 데이터 관리 방식이 있다
각각의 방식들을 한번 알아보도록 하자
- insert ignore
- replace
- on dupicate key update
중복으로 인지하는 경우는 아래와 같다
데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우
insert ignore
새로 추가로 온 insert 무시
INSERT IGNORE INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0);
replace
기존의 레코드를 삭제하고 다시 데이터 삽입
레코드가 삭제되고 다시 삽입되기 때문에 AUTO_INCREMENT로 ID값을 지정했을 경우 ID값이 변한다
REPLACE INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0);
on duplicate key update
지정한 데이터만 UPDATE
INSERT INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0)
ON DUPLICATE KEY UPDATE
column2 = column2 * 2,
column3 = column3 + 100;
위에 예시에서는 기존에 값에 특정한 작업을 해서 새로운 값을 넣는 경우지만
insert into... values(...)에 입력한 값을 update 조건에 추가하고 싶은 경우는 아래와 같이 사용하면 된다
INSERT INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0)
ON DUPLICATE KEY UPDATE
column1 = VALUES(column1);
VALUES() 블럭 없이 칼럼명만 입력하게 되면 이전에 존재하던 값이 들어가게 된다
INSERT INTO TABLE_NAME (column1, column2, column3) VALUES ('kim', 1000, 0)
ON DUPLICATE KEY UPDATE
column1 = column1;