有时会遇到一种情况,当数据表不存在某记录时便插入新记录,当数据表中已经存在该记录时则更新该记录。
当指定了ON DUPLICATE KEY UPDATE,当插入新的记录会导致主键列或UNIQUE列出现重复数据时,则对旧的记录执行UPDATE。
例如,有一个计数器表用来记录网站每日的访问数:
CREATE TABLE daily_counter (
id INT UNSIGNED AUTO_INCREMENT,
day DATE NOT NULL UNIQUE,
cnt INT UNSIGNED NOT NULL,
PRIMARY KEY (id)
);
更新计数器时,当天的第一次访问在计数器表里插入一条新的记录,后面的访问则只需要更新该记录:
INSERT INTO daily_counter(day, cnt)
VALUES(CURDATE(), 1)
ON DUPLICATE KEY UPDATE cnt = cnt + 1;