我在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)
这样的约束,但我不知道这意味着主键传递代码和标题之类的参数。
此设置是否都是主键?
是否可以有两个主键?
答案 0 :(得分:7)
这不是两个主键,而是一个复合主键。
这意味着主键由两列code
和title
组成(因此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)
此外,不可能有多个主键。在主键之后,您可以使用唯一键来阻止该列具有重复项,但主键会自动设置为索引。