sql单主键

时间:2013-04-12 15:28:57

标签: sql primary-key

在阅读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”声明。

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:2)

这是composite primary key。当您在表上定义多个列作为主键时,它将被称为composite primary key

答案 2 :(得分:1)

您的引用

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

具有误导性。这相当于说每个州只能有一个资本城市,或者每个公司只能有一个首席执行官。

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

编辑......除了一个小的区别。如果将某个键指定为 键,则该键中使用的所有字段都必须是不可为空的。其他唯一键不需要遵守此规则,尽管表中包含空值的行必须仍然是唯一的,因为对于所有非可空字段而言,不能有更多具有相同值的行,并且可空的领域。