我想在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
答案 0 :(得分:150)
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)
)
答案 1 :(得分:115)
创建唯一约束条件,两个数字一起不能重复:
ALTER TABLE someTable
ADD UNIQUE (col1, col2)
答案 2 :(得分:13)
看起来像常规的UNIQUE CONSTRAINT:)
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));
更多here
答案 3 :(得分:3)
如果像我一样,您的登陆地点是:
这是对我有用的方法,它利用上述答案之一并将其扩展:
-- up
ALTER TABLE myoldtable ADD COLUMN newcolumn TEXT;
ALTER TABLE myoldtable ADD CONSTRAINT myoldtable_oldcolumn_newcolumn_key UNIQUE (oldcolumn, newcolumn);
---
ALTER TABLE myoldtable DROP CONSTRAINT myoldtable_oldcolumn_newcolumn_key;
ALTER TABLE myoldtable DROP COLUMN newcolumn;
-- down