본문 바로가기

IT/Mysql & MariaDB

[Mysql] ON DUPLICATE KEY UPDATE ...

1. ON DUPLICATE KEY UPDATE

데이터 삽입 시, PRIMERY KEY나 UNIQUE KEY가 중복되었을 경우 지정한 데이터만 UPDATE하는 명령어를 의미한다.
(중복된 키가 없을 경우 INSERT 로직을 수행한다.) 

1) member 테이블 생성

CREATE TABLE member (
	id INT AUTO_INCREMENT primary KEY,
	NAME VARCHAR(50) UNIQUE KEY,
	price INT NOT NULL DEFAULT 0,
	cnt INT NOT NULL DEFAULT 0
);

2) 데이터 삽입

INSERT INTO member (NAME, price, cnt) VALUES ('kim', 1000, 0) 
ON DUPLICATE KEY UPDATE 
  price = price * 2, 
  cnt = cnt + 1;

한번 더 데이터를 삽입 할 경우

새로운 행이 삽입 되지 않고, price와 cnt가 변경된 것을 볼 수 있다.

즉, 데이터 삽입 시, 중복키 제약조건에 위배 되면 ON DUPLICATE KEY UPDATE 아래에 지정한 필드가 수정된다.

위 테이블에 경우 name 값이 중복 되므로 price와 cnt 필드가 지정한 값으로 수정되었다.

2. INSERT IGNORE

중복키 제약조건에 위배되면 Insert를 무시한다.

INSERT IGNORE INTO member (NAME, price, cnt) VALUES ('kim', 1000, 0);

3. REPLACE INTO

중복키 제약조건에 위배되면 해당 레코드를 삭제하고 다시 삽입한다.

REPLACE INTO member (NAME, price, cnt) VALUES ('kim', 1000, 0);

레코드가 삭제되고 다시 삽입되기 때문에 AUTO_INCREMENT로 ID(PK)값을 지정했을 경우 ID값이 변하게 된다.