MySQL 主键和候选键的区别
在MySQL中,键是用于从表中访问记录的属性或一组属性。它们还用于构建两个表之间的关系。主键和候选键都可以在表或关系中唯一标识每个记录。其中最大的区别是,一个表只能有一个主键,但可以有多个候选键。本文将根据各种参数比较主键和候选键之间的基本区别。在进行比较之前,我们将简要介绍这些键。
什么是主键?
主键是在表或关系中唯一标识每个记录的关键属性。它是一个最小的超键;这就是为什么在任何关系中只能包含一个主键。 例如,假设我们有一个名为“students”的表,其中包含ID、姓名、年龄和地址列。在这里,我们只能将ID列设置为主键,因为所有其他列的值可以相同,但ID列不能相同。
什么是候选键?
候选键是在表或关系中唯一标识每个记录的属性或属性集,但请注意,表中可以包含多个候选键。这个键可以存储与主键相反的NULL值。 例如,假设我们有一个名为“students”的表,其中包含ID、姓名、出生日期、年龄和地址列。在这里,我们可以找出两个候选键,分别是{ID}和{Name,出生日期}。因此,这表明有多个候选键可用来唯一标识表或关系。
由于一个表或关系可以有多个候选键,所以只有一个候选键能够成为主键。请注意,每个候选键都可以成为主键,但只能选择一个作为主键。成为主键的规则是键的属性值必须是唯一的,并且对于任何域,它们都不能为Null。
主键和候选键的主要区别
以下几点解释了主键和候选键之间的主要区别:
- 主键是表或关系的唯一且必需的属性。相比之下,候选键有多个候选值,其中一个候选键可以被选为主键。
- 两者之间的根本区别在于,模式中的一个表或关系只能有一个主键,但可以有多个候选键。
- 不强制定义主键,但没有候选键就无法建立关系。
- 主键属性永远不能为NULL,因为其主要功能是唯一标识表或关系中的记录。我们还可以将主键用作其他关系中的外键。因此,它不能为NULL。此功能有助于在所引用的关系中查找记录。候选键可以为NULL,除非指定了非空属性约束。
- 每个主键都可以是候选键,但反过来则不可能。
主键与候选键比较图表
以下比较图表以简明的方式解释了它们的主要区别:
比较基础 | 主键 | 候选键 |
---|---|---|
定义 | 它是一个唯一且非空的键,用于唯一地标识模式中每个表的记录。 | 它也是一个唯一键,用于唯一地标识关系或表中的记录。 |
基本 | 一个表或关系只能包含一个主键。 | 一个表或关系可以有多个候选键。 |
NULL | 主键的任何列都不能为NULL。 | 候选键的列可以包含NULL值。 |
目标 | 它是表或关系的基本组成部分。 | 它表示哪个键可以用作主键。 |
用途 | 它可以用作候选键。 | 它可能或可能不用作主键。 |
指定 | 不需要为任何关系指定主键。 | 在不指定候选键的情况下无法建立关系。 |
示例 | 考虑一个名为“student”的表,具有列(roll_no., name, class, DOB, email, mobile)。这里, roll_no**列可以作为关系的主键,因为它可以唯一标识学生的记录。 | 给定表中的roll_no, mobile和email列可以作为候选键,因为它们可以唯一标识学生的记录。 |
结论
在这篇文章中,我们对主键和候选键进行了比较。我们得出的结论是,在关系中指定主键是可选的。但是如果我们在声明一个关系,候选键必须存在于该关系中。