在 SQL 中,如果我们可以使用 NOT NULL 和 UNIQUE 约束来代替主键,为什么还需要主键呢?

Sha*_*edi 3 sql database primary-key

SQL 中的主键是NOT NULLUNIQUE约束的组合,唯一的区别是表中只能存在一个主键约束。

为什么我们不能只使用NOT NULLUNIQUE约束来管理?甚至他们都做同样的事情。

Gor*_*off 5

主键的定义是:

  • 主键是unique.
  • 主键是not null.
  • 表只有一个主键。

你问的是第三个条件。嗯,这就是定义。“主键”是一组已明确选择的键,用于唯一标识表中的每一行。“主要”一词意味着每个表只有一个。满足前两个条件的其他键或键组合称为候选主键

尽管没有严格执行,但主键是引用各个行的最佳方法。例如,它们应该用于外键约束(我接触到的任何数据库都会强制执行外键约束的主键)。多个不同的键引用单个表会混淆数据模型。考虑实体关系建模。链接应该是主键。

为了让大家了解一下主键的使用,一些数据库(例如使用 InnoDB 存储引擎的 MySQL)默认基于主键进行簇表。一个表只能聚集一次,因此使用单个键。

  • 换句话说,如果表 (a) 包含唯一且非空的键,且该键是唯一的此类键,则该键就是主键。如果表 (b) 不包含这样的键,则它没有主键。如果表(c)包含多个这样的键,则其主键(如果有的话)的指定在应用中纯粹是常规的,附带条件仍然是不能将多于一个这样的键指定为主键。满足主键标准但未指定为主键的键称为“候选主键”。主键可能会或不会聚集,并且聚集可能会或不会在主键上 (2认同)