SQLite“替换或替换为”与“更新...在哪里”

dluptydi  于 2023-10-23  发布在  SQLite
关注(0)|答案(4)|浏览(165)

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

n3schb8v

n3schb8v1#

如果行不存在,UPDATE将不执行任何操作。
其中,如果行不存在,则作为替换或替换将插入,如果行存在,则替换值。

bweufnob

bweufnob2#

另一个值得注意的事实:CONTAINOR REPLACE将替换语句中未提供的任何值。
例如,如果你的表包含一个列“lastname”,你没有提供一个值,如果可能的话(如果约束允许的话),CANORREPLACE将使“lastname”无效,或者失败。

envsm3lx

envsm3lx3#

REPLACE INTO table(column_list) VALUES(value_list);

是一种较短形式的

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

为了使REPLACE正确执行,表结构必须具有唯一的行,无论是简单的主键还是唯一的索引。
REPLACE删除,然后重新启动记录,并将导致重新启动触发器执行(如果您设置了它们)。如果您有一个触发器上的安装,您可能会遇到问题。
这是一个工作周围。没有检查速度。

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

其次是

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

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

pieyvz9o

pieyvz9o4#

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

相关问题