主键与候选键的区别

17 Mar 2025 | 4 分钟阅读

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

Primary Key vs Candidate Key

什么是主键?

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

什么是候选键?

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

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

主键与候选键的主要区别

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

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

主键与候选键比较图

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

比较基础主键候选键
定义它是用于唯一标识模式中每个表记录的唯一非空键。它也是一个用于唯一标识关系或表中记录的唯一键。
基本功能一个表或关系只能包含一个主键。一个表或关系可以有多个候选键。
NULL主键的任何列都不能为NULL。候选键的列可以包含NULL值。
目的它是表或关系的关键部分。它表示哪个键可以作为主键使用。
用途它可以被用作候选键。它可能被用作主键,也可能不被用作主键。
指定对于任何关系,不一定要指定主键。没有指定候选键就没有关系。
示例考虑一个名为"student"的表,其中包含(roll_no., name, class, DOB, email, mobile)列。这里roll_no列可以作为关系的主键,因为它唯一地标识学生记录。在给定的表中,roll_no, mobile,email列都可以是候选键,因为它们可以唯一地标识学生记录。

结论

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


下一主题MySQL面试题