我创建了一个SQLite表,如下所示
CREATE TABLE event
(_id INTEGER PRIMARY KEY AUTOINCREMENT,
event_id TEXT NOT NULL,
instance_id TEXT NOT NULL,
....,
UNIQUE (event_id, instance_id) ON CONFLICT REPLACE)
现在,当插入时发生冲突时,SQLite用新行替换该行,这又更改了我的主键_id
。
我不想在替换主键时(发生冲突)更改主键。我该怎么办?
答案 0 :(得分:0)
ON REPLACE
删除存在冲突的行并插入新行。因此,是的,除非要插入的值中包含该rowid,否则它将进行更改。
如果您使用的是sqlite 3.24或更高版本,则可以使用另一种类型的冲突解决方案,当您违反特定的唯一约束时,仅允许您更新某些列。它被称为UPSERT。对于这种情况,这是您最好的选择。
另一种选择涉及尝试插入,检测唯一性错误并进行更新。如果卡在旧版本上,我只会走这条路。
编辑:必须真的需要AUTOINCREMENT吗?