首页/数据/数据库速查/INSERT IGNORE / ON DUPLICATE KEY UPDATE / REPLACE
SQL 语法52 条

INSERT IGNORE / ON DUPLICATE KEY UPDATE / REPLACE

三种冲突处理:IGNORE 跳过(可能吞掉其他错误)、ON DUPLICATE KEY UPDATE 更新(推荐)、REPLACE 先删后插(会触发级联)。

数据库速查数据更新于 2026-10-12
用途冲突策略
IGNORE遇冲突跳过
UPSERTON DUPLICATE KEY UPDATE
REPLACEDELETE + INSERT

UPSERT 示例

UPSERT 示例
INSERT INTO counters (id, cnt) VALUES (1, 1)
ON DUPLICATE KEY UPDATE cnt = cnt + 1;

IGNORE 与 REPLACE

IGNORE 与 REPLACE
INSERT IGNORE INTO tags (name) VALUES ('sql');
REPLACE INTO kv_setting (k, v) VALUES ('theme', 'dark');
REPLACE 会删除旧行再插入新行:自增 id 变化、触发器与级联外键都会被触发,能用 UPSERT 就别用 REPLACE。

易错点

  • IGNORE 会忽略所有可忽略错误(包括截断与类型错误),慎用
  • ON DUPLICATE KEY UPDATE 依赖主键或唯一索引判断冲突,没唯一索引就变成纯插入

数据来源与参考

  • MySQL 8.0 Reference Manual: INSERT ... ON DUPLICATE KEY UPDATE Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌