如何防止更新SQLite数据库中的重复行?

时间:2010-05-30 13:28:55

标签: database sqlite

我在SQLite表中插入新行,但我不想插入重复的行。

如果可能的话,我也不想指定数据库中的每一列。 我甚至不知道这是否可能。

我应该能够获取我的值并使用它们创建一个新行,但如果它们复制另一行,它们应该覆盖现有行或不执行任何操作。

3 个答案:

答案 0 :(得分:3)

这是数据库设计和规范化的最初步骤之一。您必须能够明确定义重复行的含义,然后在表中表示该定义的列上放置主键约束(或唯一约束)。

在定义 duplicate 的含义之前,您必须准确定义(或决定)要包含的表格。即,表中每一行的实际业务领域实体或抽象表示或将保存...的数据

完成此操作后,PK或唯一约束将阻止您插入重复的行...相同的PK将帮助您找到存在的重复行,并使用非重复的值更新它-defining(非PK)列与现有重复行中的值不同。只有在完成所有这些操作后,才能插入或替换(由SQL Lite定义)进程帮助。此命令检查是否存在重复行(由yr PK约束定义的*),如果存在,则不会插入新行,而是使用Replace查询spplied的值更新该行中的非PK定义列。

答案 1 :(得分:1)

你的欲望似乎相互矛盾。虽然安德烈的insert or replace答案会让你接近你想要的东西,但应该为自己澄清你真正想要的东西。

如果您不想指定每一列,并且您希望(可能)部分行更新而不是插入,您应该查看unique constraint并知道您的要求的模糊性也是由SQL92 Committee制作。

答案 2 :(得分:0)

http://www.sqlite.org/lang_insert.html

insert or replace可能会让您感兴趣