根据PostgreSQL文档,一个表最多只能有一个主键(虽然它可以有许多唯一且非空的约束)。
CREATE TABLE products (
product_no integer PRIMARY KEY,
name text,
price numeric
);
那么当您将两列作为主键时会发生什么情况,如下表所示?
CREATE TABLE example (
a integer,
b integer,
c integer,
PRIMARY KEY (a, c)
);
“main”主键是“a”还是仅为a和c设置的唯一/非空约束? postgresql如何知道哪一个是主键?
任何帮助都会很棒。感谢
以下会产生什么?主键是否仍然是a和c的组合,或者是主键,而c只是一个唯一/非空的约束?
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)
然而第三种情况可能与上述情况相同:
CREATE TABLE example (
a integer PRIMARY KEY,
b integer,
c integer PRIMARY KEY
);
测试完上述产品后:
ERROR: multiple primary keys for table "example" are not allowed
LINE 4: c integer PRIMARY KEY
答案 0 :(得分:2)
在第二种情况下,a
和c
的组合是数据库表example
的唯一主键。这意味着a
可能不是唯一的,c
可能不是唯一的,但a和c的组合每行应该是唯一的。从这个意义上说,没有“ a是主要主键”这样的东西。
您的第三和第四种情况都不是有效的PostgreSQL代码。我用SQL Fiddle确认了它。