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列可以是给定表中的候选键,因为它们可以唯一标识学生的记录。 |
结论
在本文中,我们对主键和候选键进行了比较。在这里,我们得出结论,为关系指定主键是可选的。但是如果我们声明一个关系,候选键必须存在于该关系中。
热门文章
优秀文章