我希望更新一行,如果它存在于表中,或者在单个查询中将其插入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
此处Name
和Type
的组合将是唯一的。
我想将initialvalue = 50
和finalvalue = 90
设置为name = A
和Type = 3
(如果存在),否则将其插入。
我正在使用此命令,但它发出此错误:
替换为table1(Name,Type,InitialValue,FinalValue)VALUES ('A',3,50,90)WHERE Name ='A'AND Type = 3;
错误是:
靠近“WHERE”:语法错误无法执行语句
我如何实现目标?请帮忙。
答案 0 :(得分:7)
replace就像insert一样,它只是检查是否有重复的密钥,如果是的话 它会删除该行,并插入新行,否则只需插入
如果存在(名称,类型)的唯一索引并且键入以下命令,则可以执行此操作
REPLACE INTO table1 (Name,Type,InitialValue,FinalValue) VALUES ('A',3,50,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没有,但如果插入失败,你可以尝试{} catch
http://blog.client9.com/2007/11/sqlite3-and-on-duplicate-key-update.html