11

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

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

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

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

我正在使用以下查询:

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

这里的“id”列没有出现,因为它是具有AUTOINCREMENT属性的主键。

4

2 回答 2

20

您将需要向其他列添加一些独特的约束以使其正常工作,即使这样您的 ID 也会发生变化。

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

更多信息:http ://www.sqlite.org/lang_conflict.html

于 2013-08-09T17:25:15.123 回答
11

简短的回答:不,它没有。

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

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

于 2013-08-09T17:25:34.793 回答