我想在 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
CREATE TABLE someTable (
id serial PRIMARY KEY,
col1 int NOT NULL,
col2 int NOT NULL,
UNIQUE (col1, col2)
)
autoincrement
不是 postgresql。您需要一个 integer primary key generated always as identity
(或 serial
,如果您使用 PG 9 或更低版本。serial
was soft-deprecated in PG 10)。
如果 col1
和 col2
是唯一的并且不能为空,那么它们是一个很好的主键:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
PRIMARY KEY (col1, col2)
)
创建两个数字不能一起重复的唯一约束:
ALTER TABLE someTable
ADD UNIQUE (col1, col2)
似乎是常规的 UNIQUE CONSTRAINT :)
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));
更多here
a
的索引和 c
的索引?因为我有时需要根据a
快速查找,有时需要根据c
快速查找。
如果像我一样,你来到这里:
预先存在的表,
您需要向其中添加新列,以及
还需要在新列和旧列上添加新的唯一约束,并且
能够撤消这一切(即写下迁移)
这对我有用,利用上述答案之一并扩展它:
-- 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
不定期副业成功案例分享