代码之家  ›  专栏  ›  技术社区  ›  CodeFusionMobile

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

  •  1
  • CodeFusionMobile  · 技术社区  · 14 年前

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

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

    我应该能够获取我的值并用它们创建一个新行,但是如果它们复制了另一行,那么它们要么覆盖现有行,要么什么也不做。

    3 回复  |  直到 14 年前
        1
  •  0
  •   Andrey    14 年前

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

    insert or replace 你可能会感兴趣

        2
  •  3
  •   Charles Bretana    14 年前

    这是 数据库设计与规范化 . 你必须能够明确地定义你所说的 重复行 ,然后在表中表示该定义的列上放置主键约束(或唯一约束)。

    在你定义什么之前 复制品 意味着,您必须精确地定义(或决定)表要包含什么。也就是说,表中每一行所代表的真实业务域实体或抽象,或者将为……保存数据。

    完成此操作后,pk或unique约束将阻止您插入重复的行…相同的pk将帮助您找到存在的重复行,并使用与现有重复行中的值不同的非重复定义(非pk)列的值对其进行更新。只有在完成所有这些操作之后,插入或替换(由SQL Lite定义)过程帮助才能完成。此命令检查是否存在重复的行(*as divided by yr pk constraint),如果存在重复的行,则它将使用替换查询提供的值更新该行中的非pk定义列,而不是插入新行。

        3
  •  1
  •   msw    14 年前

    你的欲望似乎相互矛盾。而安德烈 insert or replace 答案会让你接近你想要说什么,什么可能会让你自己清楚你真正想要什么。

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