一尘不染

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

sql

我想在PostgreSQL中建立一个表,使得两列在一起必须是唯一的。只要没有两个共享这两个值,就可以有多个值。

例如:

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

因此,col1并且col2可以重复,但不能同时重复。因此,这将被允许(不包括ID)

1 1
1 2
2 1
2 2

但不是这个:

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

阅读 148

收藏
2021-03-17

共1个答案

一尘不染

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

autoincrement不是postgresql。你想要一个serial

如果col1col2成为唯一且不能为null,则它们构成一个很好的主键:

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    PRIMARY KEY (col1, col2)
)
2021-03-17