在SQL中,如果可以使用NOT NULL和UNIQUE约束代替PRIMARY KEY,那么为什么需要PRIMARY KEY?

时间:2019-06-01 10:48:12

标签: sql database primary-key

SQL中的 PRIMARY KEY NOT NULL UNIQUE 约束的组合,唯一的区别是只有一个表中可以存在PRIMARY KEY 约束。我想知道,为什么我们不能仅使用 NOT NULL UNIQUE 约束进行管理?即使他们俩都做同样的事情。

谢谢

2 个答案:

答案 0 :(得分:3)

主键的定义是:

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

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

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

为了更好地使用主键,默认情况下,某些数据库(例如使用InnoDB存储引擎的MySQL)基于主键的群集表。一个表只能集群一次,因此只能使用一个键。

答案 1 :(得分:1)

您指出了PK和唯一约束之间的区别,但这并不是它们之间的唯一区别。

的主键和唯一键之间的区别是-定义主键时,会自动创建聚集索引,而唯一键会生成非聚集索引。您可以进行一些Google搜索以了解有关聚簇索引和非聚簇索引的想法。

另一个差异是-主键是表上的唯一字段,但在特殊意义上,表将该行视为其键。这意味着其他表可以使用此字段来为其自身创建外键关系。唯一性约束只是意味着特定字段必须唯一。