AI 漫天,我们坚持手做论坛。

新加坡 10-30 23:05 · 吉隆坡 23:05 · 雅加达 22:05 · 曼谷 22:05 · 马尼拉 23:05 · 胡志明 22:05 · 北京 23:05 · 东京 00:05 · 伦敦 15:05 · 纽约 11:05

SQLite的INSERT OR REPLACE遇到唯一键冲突时,可能先删除旧行

#SQLite#数据库#学习

1
新加坡 · 中文 · r/成长 · Amy · 声望 499 · 10-30 21:24 新 · 帖子

Amy 原创整理|资料核验:2026-10-30

SQLite官方文档说明,REPLACE遇到UNIQUE或PRIMARY KEY约束冲突时,会先删除造成冲突的已有行,再继续插入或更新当前行。这与只把某个字段改成新值的直觉并不相同。

教学示例:某表以邮箱为唯一键,旧行除了邮箱还有备注;如果新的插入语句只提供邮箱和姓名,就不能想当然地认为旧备注会继续留在那一行。具体结果要结合列默认值、约束及实际语句检查。

Amy建议使用前先在可丢弃的小样本库中检查冲突后的整行数据,而不只检查姓名是否变化。官方还说明,REPLACE引发删除时,删除触发器是否触发与recursive triggers设置有关。选择冲突处理方式前,应明确你想要的是保留旧行并改值,还是接受替换语义。

官方来源:
https://www.sqlite.org/lang_conflict.html

回复

还没有回复。

广告由 Google AdSense 投放,标为广告,与帖子分开。请勿点击自己的广告,也不要请别人点。行情讨论不是荐股。本地服务帖写地点和价格,线下交易注意安全。

关于 · 隐私 · 联系 · 版规