MySQL 主键和唯一键之间的区别
在MySQL中,键是用于构建两个或多个表之间关系的列或列集。它们还用于从表中访问记录。这两个键都为表或关系中的列或列集提供了保证的唯一性。 它们之间的主要区别是主键用于标识表中的每个记录,而唯一键除了NULL值之外,还可以防止在列中出现重复输入 。在本文中,我们将基于各种参数对主键和唯一键进行必要的比较。在进行比较之前,我们将简要讨论这些键。
什么是主键?
主键 是一个 唯一或非空 的关键字,它唯一标识了表中的每一条记录。主键列不能存储重复的值,也就是说主键列的值是唯一的。它也被称为 最小超键 ;因此,在任何关系中我们只能指定一个主键。一个表的主键列可以被另一个表的外键列引用。
例如 ,我们有一个名为 学生 的表,它有属性如 Stud_ID、Roll_No、Name、Mobile 和 Email。
在这里,只有 Roll_No 列永远不会包含相同和NULL值。我们知道每个学生都有一个唯一的学号。因此,两个学生永远不会有相同的学号。这个特性帮助唯一地识别数据库中的每个记录。因此,我们可以将Roll_No属性设为主键。
主键的特点
主键具有以下重要特点:
- 主键列不能包含重复值。
- 主键实现了表的实体完整性。
- 一个表不能有多个主键列。
- 我们可以从一个或多个表字段中生成主键。
- 主键列应具有NOT NULL约束。
什么是唯一键?
唯一键是表中单个列或多个列的组合,用于唯一地标识数据库记录。唯一键 防止 在列中存储 重复值 。一个表可以包含多个唯一键列,不同于主键列。这个键和主键类似,只是唯一键列可以存储一个NULL值。唯一键也被称为 唯一约束 ,可以被另一个表的外键引用。
例如 ,让我们考虑相同的名为 students 的表,具有属性如Stud_ID、Roll_No、Name、Mobile和Email。
在这里 Stud_ID 可以被分配为唯一约束,因为每个学生必须有唯一的身份证号。如果学生更改大学,那么他们将没有任何学生ID。在这种情况下,条目可能包含一个 NULL 值,因为唯一键约束允许存储NULL,但应该只有一个。
唯一键的特点
以下是唯一键的重要特点:
- 我们可以从一个或多个表字段构建唯一键。
- 表可以定义多个唯一键列。
- 默认情况下,唯一键在非聚集唯一索引中。
- 唯一约束列可以存储NULL值,但每列只允许一个NULL。
- 外键可以引用唯一键,以保持表的唯一性。
主键和唯一键的主要区别
以下几点解释了主键和候选键之间的主要区别:
- 主键可以由一个或多个表字段组成,以唯一地标识表中的记录。另一方面,唯一键可以防止两行在某一列中具有重复条目。
- 在关系数据库中,一个表不能有多个主键,而一个表可以有多个唯一键。
- 主键列不能包含NULL值,而唯一键可以有NULL值,但是一张表中只允许一个NULL值。
- 主键应该是唯一的,但唯一键不一定是主键。
- 默认情况下,主键是聚集索引,其中数据以顺序索引的方式物理组织。相反,唯一键是唯一的非聚集索引。
- 主键实现实体完整性,而唯一键强制唯一数据。
主键与唯一键的比较图表
以下比较图表以一种快速的方式解释了它们的主要区别:
比较基础 | 主键 | 唯一键 |
---|---|---|
基本 | 主键用作表中每个记录的唯一标识符。 | 当主键不存在于表中时,唯一键也用作记录的唯一标识符。 |
NULL值 | 我们无法在主键列中存储NULL值。 | 我们可以在唯一键列中存储NULL值,但只允许一个NULL值。 |
目的 | 它强制实体完整性。 | 它确保数据的唯一性。 |
索引 | 默认情况下,主键创建聚集索引。 | 默认情况下,唯一键创建非聚集索引。 |
键的数量 | 每个表只支持一个主键。 | 一个表可以有多个唯一键。 |
值修改 | 我们无法更改或删除主键值。 | 我们可以修改唯一键列的值。 |
用途 | 用于标识表中的每条记录。 | 防止在列中存储重复条目,除了NULL值之外。 |
主键语法,我们可以使用以下语法在表中创建主键列:
CREATE TABLE Employee
(
Id INT PRIMARY KEY,
name VARCHAR(150),
address VARCHAR(250)
)
唯一键语法,我们可以使用以下语法在表中创建唯一键列:
CREATE TABLE Person
(
Id INT UNIQUE,
name VARCHAR(150),
address VARCHAR(250)
)
结论
在本文中,我们对主键和唯一键约束进行了比较。我们得出结论,当我们不希望列中包含重复值时,唯一键很有用。而主键在我们不想在表中保留NULL值时非常有用。当我们在另一个表中有一个外键需要创建表间关系时,主键也非常理想。