MySQL 主键和唯一键区别
MySQL 中的Key(键)是用于在一个或多个表之间构建关系的列或列集。它们还用于访问表中的记录。这两个键都为表或关系中的一列或一组列提供了保证的唯一性。它们之间的主要区别在于,主键(Primary Key)标识表中的每条记录,而唯一键(Unique Key)可防止列中出现重复条目,但 NULL 值除外。在本文中,我们将根据各种参数比较主键和唯一键之间的本质区别。在进行比较之前,我们将简要讨论这些关键。
一、什么是主键?
主键是唯一或非空键,用于唯一标识该表或关系中的每条记录。主键列不能存储重复值,这意味着主键列值始终是唯一的。它也被称为最小超级密钥;因此,我们不能在任何关系中指定多个主键。一张表的主键列可以被另一张表的外键列引用。
例如,我们有一个名为students的表,其属性包括 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可以指定为唯一约束,因为每个学生都必须有唯一的标识号。如果一个学生改变了学院,那么他或她将没有任何学生证。在这种情况下,条目可能包含NULL值,因为唯一键约束允许存储 NULL,但它应该只有一个。
四、唯一键的特点
以下是 唯一键 的功能:
- 我们可以从一个或多个表字段构造唯一键。
- 一个表可以定义多个唯一键列。
- 默认情况下,唯一键位于非聚集唯一索引中。
- 唯一约束列可以存储 NULL 值,但每列只允许一个 NULL 为空。
- 外键可以引用唯一约束来保持表的唯一性。
五、主键 和 唯一键 的主要区别
以下几点解释了 主键和 唯一键 之间的关键区别:
- 主键可以构成表的一个或多个字段,以唯一标识表中的记录。另一方面,唯一键可防止两行在一列中有重复的条目。
- 在关系数据库中,一个表不能有多个主键,而每个表可以有多个唯一键。
- 主键列不能包含 NULL 值,而唯一键可以包含 NULL 值,但表中只允许有一个 NULL。
- 主键应该是唯一的,但唯一的键不一定是主键。
- 默认情况下,主键是聚集索引,其中数据在顺序索引中物理组织。相反,唯一键是唯一的非聚集索引。
- 主键实现实体完整性,而唯一键执行唯一数据。
六、主键 与 唯一键 详细对比
以下比较图表快速解释了它们的主要区别:
比较维度 | 主键(Primary Key) | 唯一键(Unique Key) |
---|---|---|
基本概念 | 主键用作表中每条记录的唯一标识符。 | 当表中不存在主键时,唯一键也是记录的唯一标识符。 |
空值 | 我们不能在主键列中存储 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 值时,主键很有用。当我们在另一个表中有一个外键来创建表之间的关系时,它也可能是理想的。
热门文章
优秀文章