参考:MySQL8.0使用手册
使用须知:
- 通常,您应该尽量避免ON DUPLICATE KEY UPDATE 在具有多个唯一索引的表上使用子句,有可能会造成锁问题从而影响性能;
- ON DUPLICATE KEY UPDATE子句可以包含多个列分配,以逗号分隔;
- ON DUPLICATE KEY UPDATE可以利用INSERT字句的VALUES来进行赋值,比如:
INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6)
ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
关于返回
- 对于ON DUPLICATE KEY UPDATE,如果将行作为新行插入,则每行的受影响行值为1;
- 如果更新现有行,则为2,如果现有行设置为其当前值,则为0;
- 如果在连接到mysqld时指定C API函数的 CLIENT_FOUND_ROWS标志,则 如果将现有行设置为其当前值,则affected-rows值为1(不为0)。