테이블에 만약 값이 존재하지 않는다면 삽입하고, 존재한다면 업데이트 하라.
INSERT ... ON DUPLICATE KEY UPDATE는 INSERT 문의 확장이다. 만약 unique나 primary 키를 찾는다면 업데이트를 수행해라.
API의 CLINT_FOUND_ROWS flag가 설정되어 있찌 않는다면, 삽입을 한경우 1, 업데이트를 한 경우 2가 리포트 될 것이다.
만약 하나 이상의 고유 인덱스가 일치하면 첫 번쨰 인덱스만 업데이트 된다. 둘 이상의 고유 인덱스가 있는 테이블의 경우 사용하지 않는 것이 좋다.
테이블에 AUTO_INCREMENT primary 키가 존재하고 INSERT하거나 UPDATE하면, LAST_INSERT_ID() 함수는 AUTO_INCREMENT 값을 반환한다.
VALUES() 함수는 ON DUPLICATE KEY UPDATE 절에서만 사용할 수 있으며 다른 컨텍스트에서는 의미가 없다. INSERT 부분에서 컬럼 값을 반환한다. 이 기능은 다중 행 삽입에 특히 유용하다.
ON DUPLICATE KEY UPDATE 사용시 IGNORE와 DELAYED 옵션은 무시된다.
INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);