sqlite“插入或替换”是否与AUTOINCREMENT主键一起使用?

时间:2013-08-09 17:09:15

标签: android database sqlite

我有一个数据库,我在其中创建了一个名为“SectionDetails”的表。 在此表中,我将“id”设置为具有AUTOINCREMENT属性的主键。我将数据插入此表。

然而,我来到了我需要检查我插入的记录是否已经存在的情况(如果记录存在然后用相同的值替换它或跳过它,如果记录不存在则插入新的)。

但是当我尝试插入具有相同列值的记录时,它会增加主键并再次插入同一行而不是替换。

所以,我的问题是 - sqlite“插入或替换”是否适用于AUTOINCREMENT主键?

我正在使用以下查询:

insert or replace into SectionDetails(Name,Month,Title,Url)values('Deepak',"August","None","www.dd619.com")

此处列“id”未显示,因为它是具有AUTOINCREMENT属性的主键。

2 个答案:

答案 0 :(得分:17)

您需要为其他列添加一些唯一约束才能使其正常工作,即使这样您也会更改ID。

insert or replace实际上是具有insert冲突解决策略的on conflict replace。也就是说,当插入会违反某些约束时,首先删除所有冲突的行,然后才进行插入。然后,autoincrement机制将为您生成新的ID值。

有关详细信息:http://www.sqlite.org/lang_conflict.html

答案 1 :(得分:8)

简短回答:不,不是。

“插入或替换”仅在您指定主键时才有效。通过您描述的设置中的自动增量,这不起作用。

最快的方法可能是为您的用例创建自定义插入/更新方法。