当前位置:  开发笔记 > 数据库 > 正文

SQLite"INSERT OR REPLACE INTO"与"UPDATE ... WHERE"

如何解决《SQLite"INSERTORREPLACEINTO"与"UPDATEWHERE"》经验,为你挑选了3个好方法。

我以前从未见过INSERT OR REPLACE INTO names (id, name) VALUES (1, "John")SQL中使用的语法,我想知道它为什么比它好UPDATE names SET name = "John" WHERE id = 1.是否有任何理由使用其中一个.这种语法是否特定于SQLite?



1> Adriaan Stan..:

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

如果行不存在则插入INSERT OR REPLACE,否则替换值.


在这个问题http://stackoverflow.com/questions/690632/how-do-i-update-a-row-in-a-table-or-insert-it-if-it-doesnt-exist中声明替换为将始终删除该行,而更新不会
要明确说明@ Seppl有用注释的含义:_always在"updated"row_中指定所需的完整值集; 由于旧行首先被删除,因此不保留任何值.

2> cybergen..:

我正在处理这样的声明,并想出另一个需要注意的事实:INSERT OR REPLACE将替换语句中未提供的任何值.例如,如果您的表包含一个您没有提供值的"lastname"列,INSERT OR REPLACE将尽可能使"lastname"无效(约束允许)或失败.


+1; 换句话说:总是指定_complete值集_"更新"行应该具有 - 没有保留现有值; 这种行为的原因实际上不是现有行的*update*操作,而是删除,然后是重新插入.

3> PodTech.io..:
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'

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

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有