MySQL 主键和候选键区别

MySQL 中的Key(键)是一个属性或一组属性,用于访问表中的记录。它们还用于构建两个表之间的关系。主键和候选键都在表或关系中唯一标识每条记录。它们之间最流行的区别是一张表只能有一个主键,但可以有多个候选键。在本文中,我们将根据各种参数比较主键和候选键之间的本质区别。在进行比较之前,我们将简要讨论这些Key(键)。

一、什么是主键?

主键是唯一或非空键,用于唯一标识表或关系中的每条记录。它是一个最小的超级密钥;这就是为什么它在任何关系中只能包含一个主键。例如,假设我们有一个名为students的表,其中包含 ID、姓名、年龄和地址列。这里我们可以只将 ID 列设为主键,因为所有其他列的值都可以相同,但 ID 列不能相同。

二、什么是候选键?

候选键是一个属性或一组属性,用于唯一标识表或关系中的每条记录,但请注意,一个表可能包含多个候选键。此键可以存储与主键相反的NULL值。例如,假设我们有一个名为students的表,其中包含 ID、姓名、出生日期、年龄和地址列。在这里,我们可以找出两个候选键,即 {ID} 和 {Name, DOB}。因此,它阐明了不止一个候选键可用于唯一地标识表或关系。

由于一个表或关系可以有多个候选键,因此一个候选键可以有资格成为所有候选键中的主键。请注意,每个候选键都可以是主键,但只能选择一个作为主键。成为候选键中的主键的规则是键的属性值必须是唯一的,并且对于任何域都不能为 Null。

三、主键和候选键 的主要区别

以下几点解释了主键和候选键之间的主要区别:

  • 主键是表或关系的唯一且必不可少的属性。相比之下,候选键有很多候选,其中可以选择一个候选键作为主键。
  • 两个键之间的根本区别在于,模式中的表或关系只能有一个主键,但可以有多个候选键。
  • 定义主键不是强制性的,但没有候选键就不可能存在关系。
  • 主键属性永远不能为 NULL,因为它的主要功能是唯一标识表或关系中的记录。我们还可以在其他关系中使用主键作为外键。因此,它不能为 NULL。此功能有助于查找引用关系中的记录。除非将属性约束指定为非空,否则候选键可以为 NULL。
  • 每个主键都可以是候选键,但反之亦然。

四、主键 与 候选键 详细对比

以下比较图表快速解释了它们的主要区别:

比较维度 主键(Primary Key) 候选键(Candidate Key)
定义 主键是唯一且非空的键,用于唯一标识模式中每个表的记录。 候选键也是唯一标识关系或表中记录的唯一键。
数量 一个表或关系只能包含一个主键。 一个表或关系可以有多个候选键。
空值 主键的任何列都不能为 NULL。 候选键可以包含 NULL 值。
客观的 主键是表或关系的重要组成部分。 候选键表示哪个键可以用作主键。
采用 主键可以用作候选键。 候选键可以用作也可以不用作主键。
是否必须指定 不必为任何关系指定主键。 如果不指定候选键,就不可能存在关系。
例子 考虑一个包含列(roll_no.、name、class、DOB、email、mobile)的表“ student ”。这里roll_no列可以作为关系的主键,因为它唯一地标识了学生的记录。 roll_no 、mobile和email列可以是给定表中的候选键,因为它们可以唯一标识学生的记录。

结论

在本文中,我们对主键和候选键进行了比较。在这里,我们得出结论,为关系指定主键是可选的。但是如果我们声明一个关系,候选键必须存在于该关系中。

 

热门文章

优秀文章