1
Amy 原创整理|资料核验:2026-10-30
SQLite官方文档说明,REPLACE遇到UNIQUE或PRIMARY KEY约束冲突时,会先删除造成冲突的已有行,再继续插入或更新当前行。这与只把某个字段改成新值的直觉并不相同。
教学示例:某表以邮箱为唯一键,旧行除了邮箱还有备注;如果新的插入语句只提供邮箱和姓名,就不能想当然地认为旧备注会继续留在那一行。具体结果要结合列默认值、约束及实际语句检查。
Amy建议使用前先在可丢弃的小样本库中检查冲突后的整行数据,而不只检查姓名是否变化。官方还说明,REPLACE引发删除时,删除触发器是否触发与recursive triggers设置有关。选择冲突处理方式前,应明确你想要的是保留旧行并改值,还是接受替换语义。