我以前从未见过SQL中使用的语法INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")
,我想知道为什么它比UPDATE names SET name = "John" WHERE id = 1
好。是否有任何理由使用其中一个。这种语法是否特定于SQLite?
答案 0 :(得分:84)
如果行不存在,UPDATE将不会执行任何操作。
如果行不存在则插入INSERT OR REPLACE,否则替换值。
答案 1 :(得分:31)
我正在制作这样的声明,并想出另一个事实要注意: INSERT OR REPLACE将替换语句中未提供的任何值。例如,如果您的表包含一个您没有提供值的“lastname”列,INSERT OR REPLACE将尽可能使“lastname”无效(约束允许)或失败。
答案 2 :(得分:8)
REPLACE INTO table(column_list) VALUES(value_list);
是
的缩写形式INSERT OR REPLACE INTO table(column_list) VALUES(value_list);
要使REPLACE正确执行,您的表结构必须具有唯一的行,无论是简单的主键还是唯一的索引。
REPLACE删除,然后INSERT记录,如果你设置它们将导致INSERT触发器执行。如果您在INSERT上有触发器,则可能会遇到问题。
这是一个解决方法..没有检查速度..
INSERT OR IGNORE INTO table (column_list) VALUES(value_list);
接着是
UPDATE table SET field=value,field2=value WHERE uniqueid='uniquevalue'
此方法允许在不引起触发的情况下进行替换。
答案 3 :(得分:4)
如果id = 1尚不存在,插入或替换查询将插入新记录。
如果更新查询存在,则更新查询只会输入id = 1,如果不存在,则不会创建新记录。