2

在阅读 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”语句。

4

3 回答 3

5

这是一个复合主键 - 它仍然是一个键,但它由多个列组成。 是对复合主键的简短描述。

于 2013-04-12T15:30:18.423 回答
2

它是一个composite primary key. 当您将多个列定义为表上的主键时,它称为composite primary key.

于 2013-04-12T15:31:55.567 回答
1

您的报价

“每个表都应该有一个主键,每个表只能有一个主键。”

具有误导性。相当于说每个州只能有一个省会城市,或者每个公司只能有一个CEO

当然,每个表只能有一个PRIMARY键。但是任何表都可以有多个唯一键。而且,坦率地说,不必将其中任何一个指定为“PRIMARY”。事实上,将一个键指定为 PRIMARY 键完全没有任何作用。主键只有一个区别(除了下面提到的),它并不与所有键相关联。

编辑...除了一个小的区别。如果一个键被指定为主,那么该键中使用的所有字段都必须是不可为空的。其他唯一键不需要遵守此规则,尽管表中包含空值的行仍然必须是唯一的,因为对于所有不可为空的字段和空值,不能有超过一行具有相同的值。可为空的字段。

于 2013-04-12T15:43:10.697 回答