首页/数据/SQL 速查/INSERT IGNORE 与 ON CONFLICT DO NOTHING
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

INSERT IGNORE 与 ON CONFLICT DO NOTHING

跳过冲突行的插入:MySQL 用 INSERT IGNORE,PostgreSQL 用 ON CONFLICT DO NOTHING;前者还会把其它错误降级为警告。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
INSERT IGNORE INTO tags (id, name) VALUES (1, 'sql');
-- 重复键:跳过;数据截断等错误:变成 warning 后继续

PostgreSQL

PostgreSQL
INSERT INTO tags (id, name) VALUES (1, 'sql')
ON CONFLICT (id) DO NOTHING;
MySQL IGNORE把可转为警告的错误全部忽略(不只重复键)
PostgreSQLDO NOTHING 仅处理指定的冲突目标
可观测两库都建议核对受影响行数,及时发现被跳过的数据

易错点

  • INSERT IGNORE 会把“超长截断、类型不匹配”等错误一起吞掉,数据质量事故的隐蔽来源
  • 用忽略冲突的方式做“存在即跳过”后,业务上错过的更新不会被发现;需要更新时用 upsert

数据来源与参考

  • MySQL 8.0 Reference Manual · INSERT IGNORE
  • PostgreSQL Documentation · INSERT
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌