【问题标题】:sql single primary keysql单主键
【发布时间】:2013-04-05 05:10:01
【问题描述】:

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

【问题讨论】:

  • 这可能会让你感兴趣:stackoverflow.com/questions/11586986/…
  • 您只能有 ONE 主键 - 但 ONE 主键可以由多列组成。规则是:一旦定义了主键(基于单个或多个列),就不​​能再向同一个表添加另一个主键定义。

标签: sql primary-key


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      你的报价

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

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

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

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

      【讨论】:

      • 除了“普通”唯一键之外,主键必须不可为空 - 这是主要区别
      • 不允许空值不是任何一个“主”键的显着特征。所有候选键必须是不可约唯一的,并且只包含值,而不是空值。这就是使它们成为钥匙的原因。历史注释:E.F.Codd 最初使用术语“主键”来表示关系的 每个 键,而不仅仅是一个键。现代用法是将它们称为候选键。但是没有区别,因为候选键与主键的含义完全相同。 “唯一键”是一个毫无意义的重言式,最好避免使用。键始终是唯一的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 2020-07-07
      • 1970-01-01
      • 2014-07-17
      • 2018-06-26
      • 2014-05-25
      • 1970-01-01
      相关资源
      最近更新 更多