我以前从未见过INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")
SQL 中使用的语法,我想知道为什么它比UPDATE names SET name = "John" WHERE id = 1
. 是否有充分的理由使用其中一个。这种语法是特定于 SQLite 的吗?
问问题
131116 次
4 回答
98
如果该行不存在,UPDATE 将不执行任何操作。
如果行不存在,则 INSERT OR REPLACE 将插入,如果存在则替换值。
于 2010-02-12T12:19:53.427 回答
35
我目前正在处理这样的声明,并发现另一个需要注意的事实:INSERT OR REPLACE 将替换声明中未提供的任何值。例如,如果您的表包含您没有为其提供值的列“lastname”,则 INSERT OR REPLACE 将在可能的情况下使“lastname”无效(约束允许)或失败。
于 2012-09-26T14:58:47.643 回答
19
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'
此方法允许在不引起触发器的情况下进行替换。
于 2016-11-16T15:38:50.433 回答
5
如果 id=1 不存在,则插入或替换查询将插入一条新记录。
更新查询将仅在它存在时 oudate id=1,如果它不存在则不会创建新记录。
于 2010-02-12T12:21:28.713 回答