在阅读w3schools关于SQL主键的文章时,我读了以下内容:
每个表都应该有一个主键,每个表只能有一个主键。
http://www.w3schools.com/sql/sql_primarykey.asp
然而,我有这个SQL文件,用于创建一个我运行和工作的表:
CREATE TABLE accessLog (
memberId SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
pageUrl VARCHAR(255) NOT NULL,
numVisits MEDIUMINT NOT NULL,
lastAccess TIMESTAMP NOT NULL,
PRIMARY KEY (memberId, pageUrl)
);
现在根据上面的主键引用,代码行:“PRIMARY KEY(memberId,pageUrl)”应该没有用。
有关如何在表中提供超过主键的任何帮助。注意:我已经知道“UNIQUE”,“UNIQUE KEY”声明。
答案 0 :(得分:5)
这是一个复合主键 - 它仍然是一个键,但它由多个列组成。 Here是复合主键的简短描述。
答案 1 :(得分:2)
这是composite primary key
。当您在表上定义多个列作为主键时,它将被称为composite primary key
。
答案 2 :(得分:1)
您的引用
“每个表都应该有一个主键,每个表只能有一个主键。”
具有误导性。这相当于说每个州只能有一个资本城市,或者每个公司只能有一个首席执行官。
当然,每个表只能有一个 PRIMARY 键。但任何表都可以有多个唯一键。而且,坦率地说,不必将其中任何一个指定为“主要”。事实上,将一个密钥指定为PRIMARY密钥完全没有任何意义。附加到主键的唯一区别(除了下面提到的)与所有键也没有关联。
编辑......除了一个小的区别。如果将某个键指定为 主 键,则该键中使用的所有字段都必须是不可为空的。其他唯一键不需要遵守此规则,尽管表中包含空值的行必须仍然是唯一的,因为对于所有非可空字段而言,不能有更多具有相同值的行,并且可空的领域。