PostgreSQL:主键

时间:2014-05-21 18:06:12

标签: postgresql primary-key

根据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

1 个答案:

答案 0 :(得分:2)

在第二种情况下,ac组合是数据库表example的唯一主键。这意味着a可能不是唯一的,c可能不是唯一的,但a和c的组合每行应该是唯一的。从这个意义上说,没有“ a是主要主键”这样的东西。

您的第三和第四种情况都不是有效的PostgreSQL代码。我用SQL Fiddle确认了它。