INSERT 문에 ON DUPLICATE KEY UPDATE 절을 명시하여 UNIQUE 인덱스 또는 PRIMARY KEY 제약 조건이 설정된 컬럼에 중복된 값이 삽입되는 상황에서 에러를 출력하지 않고 새로운 값으로 갱신할 수 있다.
ON DUPLICATE KEY UPDATE 절은 INSERT 또는 UPDATE에 대한 트리거가 활성화된 테이블에 대해서는 사용할 수 없으며, 중첩된 INSERT 문에서도 사용할 수 없다.
<INSERT … VALUES statement>
<INSERT … SET statement>
<INSERT … SELECT statement>
INSERT ...
[ON DUPLICATE KEY UPDATE column_name = expr, ... ]
--creating a new table having the same schema as a_tbl1
CREATE TABLE a_tbl3 LIKE a_tbl1;
INSERT INTO a_tbl3 SELECT * FROM a_tbl1 WHERE id IS NOT NULL and name IS NOT NULL;
SELECT * FROM a_tbl3;
id name phone
=========================================================
1 'aaa' '000-0000'
2 'bbb' '000-0000'
3 'ccc' '333-3333'
6 'eee' '000-0000'
--insert duplicated value violating UNIQUE constraint
INSERT INTO a_tbl3 VALUES(2, 'bbb', '222-2222');
ERROR: Operation would have caused one or more unique constraint violations.
--insert duplicated value with specifying ON DUPLICATED KEY UPDATE clause
INSERT INTO a_tbl3 VALUES(2, 'bbb', '222-2222')
ON DUPLICATE KEY UPDATE phone = '222-2222';
SELECT * FROM a_tbl3 WHERE id=2;
id name phone
=========================================================
2 'bbb' '222-2222'