首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Postgresql中,对两列的组合强制唯一

在Postgresql中,对两列的组合强制唯一
EN

Stack Overflow用户
提问于 2013-01-09 02:36:15
回答 3查看 135.3K关注 0票数 262

我想在PostgreSQL中设置一个表,这样两个列在一起必须是唯一的。任何一个值都可以有多个值,只要没有两个值同时共享即可。

例如:

代码语言:javascript
复制
CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)

因此,col1col2可以重复,但不能同时进行。因此,这是允许的(不包括id)

代码语言:javascript
复制
1 1
1 2
2 1
2 2

但不是这样的:

代码语言:javascript
复制
1 1
1 2
1 1 -- would reject this insert for violating constraints
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-09 02:38:46

代码语言:javascript
复制
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 (如果您使用的是PG 9或更低版本,则需要serialserial was soft-deprecated in PG 10)。

如果col1col2是唯一的,并且不能为空,那么它们就是一个很好的主键:

代码语言:javascript
复制
CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    PRIMARY KEY (col1, col2)
)
票数 318
EN

Stack Overflow用户

发布于 2013-01-09 02:42:58

创建两个数字不能一起重复的唯一约束:

代码语言:javascript
复制
ALTER TABLE someTable
ADD UNIQUE (col1, col2)
票数 208
EN

Stack Overflow用户

发布于 2013-01-09 02:38:40

看起来像是常规的唯一约束:)

代码语言:javascript
复制
CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));

更多here

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14221775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档