我有一个数据库,我在其中创建了一个名为“SectionDetails”的表。
在此表中,我将“id”设置为具有AUTOINCREMENT
属性的主键。我将数据插入此表。
然而,我来到了我需要检查我插入的记录是否已经存在的情况(如果记录存在然后用相同的值替换它或跳过它,如果记录不存在则插入新的)。
但是当我尝试插入具有相同列值的记录时,它会增加主键并再次插入同一行而不是替换。
所以,我的问题是 - sqlite“插入或替换”是否适用于AUTOINCREMENT主键?
我正在使用以下查询:
insert or replace into SectionDetails(Name,Month,Title,Url)values('Deepak',"August","None","www.dd619.com")
此处列“id”未显示,因为它是具有AUTOINCREMENT
属性的主键。
答案 0 :(得分:17)
您需要为其他列添加一些唯一约束才能使其正常工作,即使这样您也会更改ID。
insert or replace
实际上是具有insert
冲突解决策略的on conflict replace
。也就是说,当插入会违反某些约束时,首先删除所有冲突的行,然后才进行插入。然后,autoincrement
机制将为您生成新的ID值。
答案 1 :(得分:8)
简短回答:不,不是。
“插入或替换”仅在您指定主键时才有效。通过您描述的设置中的自动增量,这不起作用。
最快的方法可能是为您的用例创建自定义插入/更新方法。