web-dev-qa-db-ja.com

Postgresqlでは、2つの列の組み合わせで一意を強制します

2つの列が一緒に一意でなければならないように、postgresqlでテーブルを設定したいと思います。両方を共有する2つの値がない限り、いずれかの値の値が複数存在する場合があります。

例えば:

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
149
PearsonArtPhoto
CREATE TABLE someTable (
    id serial primary key,
    col1 int NOT NULL,
    col2 int NOT NULL,
    unique (col1, col2)
)

autoincrementはpostgresqlではありません。 serialが必要です。

Col1とcol2が一意になり、nullにできない場合、それらは適切な主キーを作成します。

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    primary key (col1, col2)
)
174
Clodoaldo Neto

2つの数値を一緒に繰り返すことはできないという一意の制約を作成します。

ALTER TABLE someTable
ADD UNIQUE (col1, col2)
126
djangojazz

通常のUNIQUE CONSTRAINTのようです:)

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

もっと こちら

13
Timur Sadykov