如何通过ON DUPLICATE KEY UPDATE在MySQL中实现数据不存在即插入,存在即更新操作?

2026-04-27 21:290阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计922个文字,预计阅读时间需要4分钟。

如何通过ON DUPLICATE KEY UPDATE在MySQL中实现数据不存在即插入,存在即更新操作?

它依赖于唯一约束(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 却始终走插入、从不更新,根本原因是目标列上没定义 UNIQUEPRIMARY KEY 约束。

阅读全文
标签:Mysql

本文共计922个文字,预计阅读时间需要4分钟。

如何通过ON DUPLICATE KEY UPDATE在MySQL中实现数据不存在即插入,存在即更新操作?

它依赖于唯一约束(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 却始终走插入、从不更新,根本原因是目标列上没定义 UNIQUEPRIMARY KEY 约束。

阅读全文
标签:Mysql