当前位置: 首页 > 知识库问答 >
问题:

在Postgresql中,在两列的组合上强制唯一

濮阳钟展
2023-03-14

我想在PostgreSQL中设置一个表,这样两列在一起必须是唯一的。任何一个值都可以有多个值,只要没有两个值同时共享。

例如:

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)

因此,col1col2可以重复,但不能同时重复。因此,这是允许的(不包括id)

1 1
1 2
2 1
2 2

但不是这个:

1 1
1 2
1 1 -- would reject this insert for violating constraints

共有3个答案

宇文灿
2023-03-14

似乎是常规的独特约束:)

CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));

这里有更多

融焕
2023-03-14

创建两个数字不能一起重复的唯一约束:

ALTER TABLE someTable
ADD UNIQUE (col1, col2)
羊舌兴文
2023-03-14
CREATE TABLE someTable (
    id serial PRIMARY KEY,
    col1 int NOT NULL,
    col2 int NOT NULL,
    UNIQUE (col1, col2)
)

autoincrement不是postgresql。您需要一个始终作为标识生成的整数主键(或串行,如果您使用第9页或更低版本。串行在第10页中被软弃用)。

如果col1col2使唯一且不能为空,那么它们将成为一个很好的主键:

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    PRIMARY KEY (col1, col2)
)

 类似资料:
  • 问题内容: 我一直在尝试找出是否有可能对两列的组合具有唯一约束。 具体来说,我有两列A和B。 我有下面这样的行 然后我希望以下组合在插入时失败 我尝试添加一个简单的约束 但这让我在已经存在时插入。 这可能吗?还是在插入之前必须检查组合是否存在? 问题答案: 您可以使用表达式的索引来执行此操作: 我不认为约束允许表达式(并且现在没有方便的Postgres进行测试),但这本质上是同一回事。

  • 我们正在制作一个Kafka队列,消息从源系统发布到该队列中。现在多个使用者可以连接到这个队列来读取消息。

  • 我有一张桌子,不知怎的,同一个人进了我的桌子两次。现在,主键只是一个自动编号,但还有两个字段存在,我想强制它们是唯一的。 例如,这些字段是: 我只想要一张带有唯一PersonNumber和Active=1的唱片 (因此这两个字段的组合必须是唯一的) SQL server中现有表的最佳方式是什么?我可以这样做,如果其他任何人使用与现有值相同的值进行插入,则插入失败,因此我不必在应用程序代码中担心这一

  • 我有下表: 我希望KEY_1和KEY_2的组合是唯一的,反之亦然。 这样,我可以使KEY_1和KEY_2之间的组合唯一,但我也希望相反。 示例: 我无法再次插入此值,反之亦然。 这应该是无效的(因为它是同一对密钥): 谢啦

  • 问题内容: 使用MS SQL Server,以下工作正常: 但是,使用PostgreSQL,以下操作将失败: 错误:重复的键值违反了唯一约束“ tbl_test_pkey”详细信息:键(testkey)=(2)已存在。 我需要在一个表中增加一列的每个值,这是复合唯一约束的一部分。如何在一份声明中做到这一点? 谢谢 ! 编辑:如果您想知道为什么这样做(至少对我而言),那么这是一个更完整的方案。 我有

  • 问题内容: 这个问题已经在这里有了答案 : 2列组合上的sql唯一约束 (3个答案) 6年前关闭。 我不确定我是否正确表达了这个问题,所以我将尝试更长的解释。我有这种桌子: 我想将(a,b)对与(b,a)相同,并禁止插入重复项。如果PostgreSQL有数据类型,我可以这样声明表: 但是事实并非如此,那么最好的方法是什么? 问题答案: