INSERT INTO… ON DUPLICATE KEY UPDATE 批量更新
on duplicate key update 只是执行了update后面的语句。
如果表包含AUTO_INCREMENT
列并INSERT ... ON DUPLICATE KEY UPDATE
插入或更新行,则该LAST_INSERT_ID()
函数返回该AUTO_INCREMENT
值。
同类语句比较:
replace into 和 insert into on duplicate key update的不同在于:
a. replace into 操作本质是对重复的记录先delete 后insert,如果更新的字段不全会将缺失的字段置为缺省值,用这个要悠着点否则不小心清空大量数据可不是闹着玩的。
b. insert into 则是只update重复记录,不会改变其它字段。
官方说明:https://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html
警告:通常,您应该尽量避免ON DUPLICATE KEY UPDATE
在具有多个唯一索引的表上使用子句
解决办法:
1、尽量不对存在多个唯一键的table使用该语句
2、在有可能有并发事务执行的insert 的内容一样情况下不使用该语句
相关文章:
https://blog.youkuaiyun.com/Michaelwubo/article/details/80930468