Pea*_*oto 160 sql postgresql unique
我想在postgresql中设置一个表,这样两列一起必须是唯一的.任何一个值都可以有多个值,只要没有两个值共享两者.
例如:
CREATE TABLE someTable (
id int PRIMARY KEY AUTOINCREMENT,
col1 int NOT NULL,
col2 int NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
所以,col1和col2可以重复,但不能在同一时间.所以,这是允许的(不包括id)
1 1
1 2
2 1
2 2
Run Code Online (Sandbox Code Playgroud)
但不是这个:
1 1
1 2
1 1 -- would reject this insert for violating constraints
Run Code Online (Sandbox Code Playgroud)
Clo*_*eto 186
CREATE TABLE someTable (
id serial primary key,
col1 int NOT NULL,
col2 int NOT NULL,
unique (col1, col2)
)
Run Code Online (Sandbox Code Playgroud)
autoincrement不是postgresql.你想要一个serial.
如果col1和col2是唯一的并且不能为null,那么它们就是一个很好的主键:
CREATE TABLE someTable (
col1 int NOT NULL,
col2 int NOT NULL,
primary key (col1, col2)
)
Run Code Online (Sandbox Code Playgroud)
dja*_*azz 136
创建两个数字一起不能重复的唯一约束:
ALTER TABLE someTable
ADD UNIQUE (col1, col2)
Run Code Online (Sandbox Code Playgroud)
Tim*_*kov 15
看起来像常规UNIQUE CONSTRAINT :)
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));
Run Code Online (Sandbox Code Playgroud)
更多这里
Tay*_*ess 11
如果,像我一样,你来到这里:
这是对我有用的方法,利用上述答案之一并对其进行扩展:
-- 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73891 次 |
| 最近记录: |