SQLite“插入或替换到”与“更新... ... 在哪里”

我以前从未见过在 SQL 中使用的语法 INSERT OR REPLACE INTO names (id, name) VALUES (1, "John"),我想知道为什么它比 UPDATE names SET name = "John" WHERE id = 1更好。有没有什么好的理由用一个来代替另一个。这种语法是特定于 SQLite 的吗?

138486 次浏览

如果该行不存在,UPDATE 将不执行任何操作。

如果行不存在,则插入 INSERT 或 REPLACE,如果行存在,则替换值。

如果 id = 1不存在,则插入或替换查询将插入一条新记录。

如果 id = 1已经存在,更新查询将只更新它,如果它不存在,则不会创建新记录。

另一个需要注意的事实是: INSERT 或 REPLACE 将替换语句中未提供的任何值。

例如,如果您的表包含一个列“ lastname”,而您没有为其提供值,INSERT 或 REPLACE 将在可能的情况下(如果约束允许的话)取消“ lastname”,或者失败。

REPLACE INTO table(column_list) VALUES(value_list);

是... ... 的缩写形式

INSERT OR REPLACE INTO table(column_list) VALUES(value_list);

要正确执行 REPLACE,表结构必须具有唯一的行,无论是简单的主键还是唯一的索引。

REPLACE 删除记录,然后插入记录,如果设置了这些记录,则将导致执行 INSERT 触发器。如果在 INSERT 上有触发器,则可能会遇到问题。


这是一个工作周围. . 没有检查的速度. 。

INSERT OR IGNORE INTO table (column_list) VALUES(value_list);

然后是

UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'

此方法允许在不引发触发器的情况下进行替换。