SQLite“插入或更换进入”与“更新…在哪里”

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

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

INSERT OR REPLACE在行不存在的情况下将被插入,或者如果它存在,则replace值。

我目前正在处理这样一个声明,并想出另一个事实来注意:INSERT OR REPLACE将会replace声明中没有提供的任何值。 例如,如果你的表包含一个你没有提供值的列“lastname”,INSERT OR REPLACE将尽可能的取消“lastname”(约束条件允许)或者失败。

插入或replace查询将插入一个新的logging如果id = 1尚不存在。

更新查询只会在id = 1的情况下响起,如果它不存在,则不会创build新logging。

 REPLACE INTO table(column_list) VALUES(value_list); 

是一个简短的forms

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

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

REPLACE删除,然后INSERT的logging,并会导致INSERT触发器执行,如果你有他们设置。 如果在INSERT上有触发器,则可能会遇到问题。


这是一个工作..没有检查速度..

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

其次是

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

这种方法允许替代发生而不引发触发。