MySQL 主键和唯一键之间的区别

MySQL 主键和唯一键之间的区别

在MySQL中,键是用于构建两个或多个表之间关系的列或列集。它们还用于从表中访问记录。这两个键都为表或关系中的列或列集提供了保证的唯一性。 它们之间的主要区别是主键用于标识表中的每个记录,而唯一键除了NULL值之外,还可以防止在列中出现重复输入 。在本文中,我们将基于各种参数对主键和唯一键进行必要的比较。在进行比较之前,我们将简要讨论这些键。

MySQL 主键和唯一键之间的区别

什么是主键?

主键 是一个 唯一或非空 的关键字,它唯一标识了表中的每一条记录。主键列不能存储重复的值,也就是说主键列的值是唯一的。它也被称为 最小超键 ;因此,在任何关系中我们只能指定一个主键。一个表的主键列可以被另一个表的外键列引用。

例如 ,我们有一个名为 学生 的表,它有属性如 Stud_ID、Roll_No、Name、Mobile 和 Email。

MySQL 主键和唯一键之间的区别

在这里,只有 Roll_No 列永远不会包含相同和NULL值。我们知道每个学生都有一个唯一的学号。因此,两个学生永远不会有相同的学号。这个特性帮助唯一地识别数据库中的每个记录。因此,我们可以将Roll_No属性设为主键。

主键的特点

主键具有以下重要特点:

  • 主键列不能包含重复值。
  • 主键实现了表的实体完整性。
  • 一个表不能有多个主键列。
  • 我们可以从一个或多个表字段中生成主键。
  • 主键列应具有NOT NULL约束。

什么是唯一键?

唯一键是表中单个列或多个列的组合,用于唯一地标识数据库记录。唯一键 防止 在列中存储 重复值 。一个表可以包含多个唯一键列,不同于主键列。这个键和主键类似,只是唯一键列可以存储一个NULL值。唯一键也被称为 唯一约束 ,可以被另一个表的外键引用。

例如 ,让我们考虑相同的名为 students 的表,具有属性如Stud_ID、Roll_No、Name、Mobile和Email。

MySQL 主键和唯一键之间的区别

在这里 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值时非常有用。当我们在另一个表中有一个外键需要创建表间关系时,主键也非常理想。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程