如何通过ON DUPLICATE KEY UPDATE在MySQL中实现数据不存在即插入,存在即更新操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计922个文字,预计阅读时间需要4分钟。
它依赖于唯一约束(UNIQUE)或主键(PRIMARY KEY)。当触发冲突时,它不是依赖于业务层再次判断,而是直接插入某列违反了唯一索引。此时,MySQL会抛出错误,转而执行UPDATE子句——这个机制本质上不检查表、不锁定(除非必要的外锁),比INSERT ... SELECT WHERE NOT EXISTS或先SELECT再分支逻辑更原子上、更高效。
注意:ON DUPLICATE KEY UPDATE 不会响应普通 WHERE 条件匹配,只响应**索引冲突**。没建唯一索引?这条语句就退化成普通 INSERT,冲突也不会触发更新。
必须提前建好唯一索引,否则 ON DUPLICATE KEY UPDATE 不生效
常见错误是写了 ON DUPLICATE KEY UPDATE 却始终走插入、从不更新,根本原因是目标列上没定义 UNIQUE 或 PRIMARY KEY 约束。
本文共计922个文字,预计阅读时间需要4分钟。
它依赖于唯一约束(UNIQUE)或主键(PRIMARY KEY)。当触发冲突时,它不是依赖于业务层再次判断,而是直接插入某列违反了唯一索引。此时,MySQL会抛出错误,转而执行UPDATE子句——这个机制本质上不检查表、不锁定(除非必要的外锁),比INSERT ... SELECT WHERE NOT EXISTS或先SELECT再分支逻辑更原子上、更高效。
注意:ON DUPLICATE KEY UPDATE 不会响应普通 WHERE 条件匹配,只响应**索引冲突**。没建唯一索引?这条语句就退化成普通 INSERT,冲突也不会触发更新。
必须提前建好唯一索引,否则 ON DUPLICATE KEY UPDATE 不生效
常见错误是写了 ON DUPLICATE KEY UPDATE 却始终走插入、从不更新,根本原因是目标列上没定义 UNIQUE 或 PRIMARY KEY 约束。

