我已经为经典的“如果已经存在,如何插入新记录或更新新记录”找到了一些“可能是”的解决方案,但是我无法让它们中的任何一个在SQLite中工作。
我有一个表定义如下:
CREATE TABLE Book
ID INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR(60) UNIQUE,
TypeID INTEGER,
Level INTEGER,
Seen INTEGER
我要做的是添加一个具有唯一名称的记录。如果名称已经存在,我想修改字段。
有人能告诉我怎么做吗?
Tags:
您需要在表上设置一个约束来触发“conflict”,然后通过执行replace来解析它:
然后您可以发布:
“从数据中选择*”将为您提供:
注意data.id是“3”而不是“1”,因为REPLACE执行删除和插入操作,而不是更新操作。这也意味着您必须确保定义了所有必需的列,否则将得到意外的空值。
看看http://sqlite.org/lang_conflict.html。
你想要这样的东西:
请注意,如果该行已存在于表中,则插入列表中的任何字段都将设置为空。这就是为什么对
ID
列有一个子选择:在替换情况下,语句会将其设置为NULL,然后分配一个新的ID。如果要在替换情况下保留行而在插入情况下将字段设置为空,则也可以使用此方法。
例如,假设您想让
Seen
单独存在:您应该使用
INSERT OR IGNORE
命令,然后使用UPDATE
命令: 在下面的示例中,name
是主键:第一个命令将插入记录。如果记录存在,它将忽略由于与现有主键冲突而导致的错误。
第二个命令将更新记录(现在确实存在)
相关问题 更多 >
编程相关推荐