【问题标题】:SQLite 3 prevent rows where all values are duplicatesSQLite 3 防止所有值都重复的行
【发布时间】:2014-06-18 15:51:43
【问题描述】:

我想知道如何创建一个不允许插入完全重复的行的表。完整是指每个值都必须相同。

我可以插入除 1 列的值之外相同的行,但如果它们都相同则不行。

我知道您可以使用 INSERT OR IGNORE 来避免插入重复的行,但问题是我的表使用自动递增的整数作为其主键,并且 INSERT OR IGNORE 仍然允许插入重复的行,因为它看到自动递增 id 不同

例如

跑步

INSERT OR IGNORE INTO table VALUES ("A", "B" "C");

两次会给我下表:

id | Column A | Column B | Column C
1.    "A"         "B"        "C"
2.    "A"         "B"        "C"

除了手动搜索行(忽略 id)以查找重复项之外,还有其他方法吗?

【问题讨论】:

  • 输入一个涵盖表中所有相关字段的唯一键。例如unique key 'foo' (a,b,c)

标签: c++ sqlite insert duplicates


【解决方案1】:

INSERT OR IGNORE 将检查 任何 约束,因此只需在要检查的字段上添加一个:

CREATE TABLE MyTable(
    ColumnA INTEGER PRIMARY KEY,
    ColumnB WHATEVER,
    ColumnC,
    UNIQUE (ColumnA, ColumnB, ColumnC)
);

【讨论】:

  • 是的,但正如我所说,我仍然希望能够添加具有相同某些列的列。所以 (A, B, C) 和 (A, D, C) 应该仍然有效, (A, B, C) (X, Y, C) 等应该仍然有效。如果我声明 A B 和 C 是唯一的,赢了它会忽略任何 A OR B OR C 相同的插入吗?
  • 这个约束做你想做的事。
  • 效果很好。我想我对 UNIQUE 的理解是不正确的,如果我这样做了:Unique(ColumnA)、Unique(ColumnB)、Unique(ColumnC)。那会检查以确保每列都是唯一的吗?
猜你喜欢
  • 2016-01-13
  • 1970-01-01
  • 2010-11-09
  • 2013-05-04
  • 1970-01-01
  • 2020-08-12
  • 2012-10-17
  • 1970-01-01
  • 2022-08-19
相关资源
最近更新 更多