SQLite中字段的唯一组合?

19 投票
2 回答
9068 浏览
提问于 2025-04-17 02:13

我正在尝试用一组数据来填充一个新的SQLite数据库,但我在避免重复行方面遇到了问题。我可以在Python中做到这一点,但我相信SQLite中肯定有设计选项可以处理这个问题。

我需要每一行都只存在于三个文本字段的唯一组合中。如果我让每个文本字段都设置为唯一(UNIQUE),那么这三个字段都必须是唯一的。但我其实想要的是这三个字符串的唯一组合。

换句话说,这些记录都应该可以存在: (a, a, a) (a, a, b) (a, b, b) (b, b, b)

如果我把所有三个字段都设置为唯一,并插入这些行,那么只有(a, a, a)和(b, b, b)会被插入。我可以在Python中把这三个字段连接起来作为主键,但这似乎有点麻烦。

2 个回答

4

如果这三列确实是主键的话,你可以把它们组合起来,形成一个复合主键:

create table t (
    a text not null,
    b text not null,
    c text not null,
    -- and whatever other columns you have...
    primary key (a, b, c)
)

不过,如果这三列中的任何一列可以是空值(NULL),那么你就应该使用Cade的唯一约束来代替。

31
CREATE TABLE (col1 typ
              , col2 typ
              , col3 typ
              , CONSTRAINT unq UNIQUE (col1, col2, col3))

这是一个链接,指向SQLite的官方网站,具体是关于创建表格的内容。SQLite是一种轻量级的数据库,常用于小型应用程序和开发测试中。通过这个链接,你可以了解如何在SQLite中创建数据表,表格就像一个电子表格,用来存储和管理数据。

撰写回答