PostgreSQL:主键

PostgreSQL:主键,postgresql,primary-key,Postgresql,Primary Key,根据PostgreSQL文档,一个表最多可以有一个主键(同时它可以有许多唯一的非空约束) 那么,如果将两列设为下表中的主键,会发生什么情况 CREATE TABLE example ( a integer, b integer, c integer, PRIMARY KEY (a, c) ); “主”主键是“a”还是仅为a和c设置了唯一/非空约束?postgresql如何知道哪一个是主键 任何帮助都会很好。谢谢 还有,下面会产生什么?主键仍然是a和c的组合,还是

根据PostgreSQL文档,一个表最多可以有一个主键(同时它可以有许多唯一的非空约束)

那么,如果将两列设为下表中的主键,会发生什么情况

CREATE TABLE example (
    a integer,
    b integer,
    c integer,
    PRIMARY KEY (a, c)
);
“主”主键是“a”还是仅为a和c设置了唯一/非空约束?postgresql如何知道哪一个是主键

任何帮助都会很好。谢谢

还有,下面会产生什么?主键仍然是a和c的组合,还是a是主键而c只是唯一/不为null的约束

CREATE TABLE example (
    a integer PRIMARY KEY,
    b integer,
    c integer,
    PRIMARY KEY (c)
);
经过测试,上述产品:

ERROR:  multiple primary keys for table "example" are not allowed
LINE 5:     PRIMARY KEY (c)
ERROR:  multiple primary keys for table "example" are not allowed
LINE 4:     c integer PRIMARY KEY
第三种情况可能与上述情况相同:

CREATE TABLE example (
    a integer PRIMARY KEY,
    b integer,
    c integer PRIMARY KEY
);
经过测试,上述产品:

ERROR:  multiple primary keys for table "example" are not allowed
LINE 5:     PRIMARY KEY (c)
ERROR:  multiple primary keys for table "example" are not allowed
LINE 4:     c integer PRIMARY KEY

在第二种情况下,
a
c
组合是DB table
示例
的唯一主键。这意味着
a
可能不是唯一的,
c
可能不是唯一的,但是a和c的组合在每行中应该是唯一的。从这个意义上讲,没有“a是主键”这样的东西


您的第三个和第四个案例不是有效的PostgreSQL代码。我过去经常证实这一点。

好的,这很好。我使用“main”这个词是因为一个表只能有一个主键。在这种情况下,“主”主键是a和c的组合。同样,在第二种情况下会发生什么。请参阅已编辑的问题。@我不确定这是有效的PostgreSQL代码。你测试过吗?@EliMiller我不知道你是否知道(你可能知道),但它非常适合测试DB风格的有效代码。所以,如果你愿意,你可以亲自检查。