代码生成两个主键?

时间:2013-06-11 03:59:17

标签: sql

我在postgresql create table page上看到了这个:

CREATE TABLE films (
    code        char(5),
    title       varchar(40),
    did         integer,
    date_prod   date,
    kind        varchar(10),
    len         interval hour to minute,
    CONSTRAINT code_title PRIMARY KEY(code,title)
);

我得到像CHECK (price > 0)这样的约束,但我不知道这意味着主键传递代码和标题之类的参数。

此设置是否都是主键?

是否可以有两个主键?

2 个答案:

答案 0 :(得分:7)

这不是两个主键,而是一个复合主键。

这意味着主键由两列codetitle组成(因此code_title约束名称。)

因此,虽然您可以拥有重复代码和重复标题的行,但没有两行可以具有相同的code/title组合:

code  title
----  -----
0000  aaaaa    Okay.
0000  bbbbb    Okay.
1111  bbbbb    Okay.
0000  aaaaa    ** No! Conflicts with first row. **

答案 1 :(得分:0)

正如paxdiablo所说,你拥有的是一个复合键。

+-------+
|A B C D|
+-------+
|1 2 2 3|
+-------+
|2 3 2 4|
+-------+
|3 2 2 3|
+-------+
|4 4 3 2|
+-------+

-A可能是主键,因为它没有重复的行

+-------+
|A B C D|
+-------+
|1 2 3 2|
+-------+
|1 3 2 3|
+-------+
|2 2 3 2|
+-------+
|1 1 3 3|
+-------+

-A不能是主键,因为它有重复的行 -A,B可以是复合键,组合它们没有重复的行(12,13,22,11)

此外,不可能有多个主键。在主键之后,您可以使用唯一键来阻止该列具有重复项,但主键会自动设置为索引。