加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如果有两个或更多条件,如何在SQLite中使用REPLACE命令

发布时间:2020-12-12 18:57:48 所属栏目:百科 来源:网络整理
导读:我想更新一行,如果它存在于表中,否则在单个查询中将其插入SQLite中.从 SQLite documentation我发现我们可以使用REPLACE命令来实现这一目标. 如果有两个或更多条件,我想知道如何使用REPLACE: 例: 如果我有表TABLE1以下记录: Name Type InitialValue FinalV
我想更新一行,如果它存在于表中,否则在单个查询中将其插入SQLite中.从 SQLite documentation我发现我们可以使用REPLACE命令来实现这一目标.

如果有两个或更多条件,我想知道如何使用REPLACE:

例:
如果我有表TABLE1以下记录:

Name   Type   InitialValue  FinalValue
   A      1          20           40
   B      2          23           50
   A      3          40           60
   C      3          54           70

这里名称和类型的组合将是唯一的.

我想设置initialvalue = 50和finalvalue = 90,其中name = A和Type = 3(如果存在),否则插入它.

我正在使用此命令,但它给出了此错误:

REPLACE INTO table1 (Name,Type,InitialValue,FinalValue) VALUES
(‘A’,3,50,90 ) WHERE Name=’A’ AND Type = 3 ;

错误是:

near “WHERE”: syntax error Unable to execute statement

我怎样才能实现目标?请帮忙.

解决方法

replace就像insert一样,它只是检查是否有重复的键,如果是的话
它会删除该行,并插入新行,否则只会插入

如果存在(名称,类型)的唯一索引并且键入以下命令,则可以执行此操作

REPLACE INTO table1 (Name,FinalValue) VALUES ('A',90 )

并且已存在Name =’A’且Type = 3的行将被替换

http://www.sqlite.org/lang_createindex.html

CREATE UNIQUE INDEX idx_name_type ON table1(Name,Type)

编辑:
快速说明 – REPLACE总是DELETES然后INSERT,所以在重载时使用它永远不是一个好主意,因为它在删除时需要独占锁定,然后在插入时

一些数据库引擎有

INSERT ... ON DUPLICATE KEY UPDATE ...

sqlite 3没有,但如果插入失败,你可以尝试try}} catch

http://blog.client9.com/2007/11/sqlite3-and-on-duplicate-key-update.html

SQLite UPSERT – ON DUPLICATE KEY UPDATE

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读