SQL Server 唯一键

17 Mar 2025 | 5 分钟阅读

唯一键是 SQL Server 中的一种约束。此约束确保我们不能在列中输入重复值。这意味着列中存储的数据在表中的行之间是唯一的。我们可以对单个列和多个列创建唯一键。例如,“student”表中的学生电子邮件地址和滚动号码应该是唯一的。此外,“Employee”表中的员工联系号码也应该是唯一的。

唯一键允许在表中插入 null 值。尽管它接受 null 值,但 SQL Server 每个列只允许一个 null 值。它维护用于在表中存储各种值的列或列集的完整性。

唯一键的必要性

我们出于以下原因使用唯一键:

  • 它有助于防止在两个记录之间的列中存储重复值。
  • 它仅保留不同的值,以确保数据库的完整性和可靠性,以便以结构化的方式检索数据。
  • 它还可以与外键结合使用,以维护表的唯一性。
  • 表中可能存在 null 值。

如何在表中创建唯一键?

SQL Server 提供两种创建表唯一键的方法:

1. 我们可以使用以下语法创建单个唯一键列

2. 我们可以使用以下语法创建多个唯一键列

注意:在创建表时提供约束名称是明智的。如果我们不提供约束名称,SQL Server 将自动生成其名称。

示例

让我们通过一个例子来理解如何在表中创建唯一键。下面的语句创建一个名为“student”的表,其中包含唯一键

接下来,我们将插入一些记录以了解此约束的工作原理

执行该语句将成功将记录添加到表中,因为未找到重复项。输出如下:

SQL Server Unique Key

让我们向表中插入另一条记录

执行该语句将抛出错误,因为 ID 列的值 1 已被插入。输出如下:

SQL Server Unique Key

现在,我们将了解如何在表中定义多个唯一键。以下语句将在 'student_info' 表的多个列上创建唯一键

执行该语句将为滚动号码和电子邮件列定义唯一键。我们可以按如下方式验证它:

SQL Server Unique Key

如何向现有列添加唯一约束?

SQL Server 提供 ALTER 命令向现有列添加唯一约束。当我们向表中的现有列或列集添加唯一键时,SQL Server 会检查这些列中的现有数据,以确保所有值都是唯一的。如果检测到重复数据,则会生成错误,并且不会添加唯一约束。

我们可以使用以下语法向表中添加唯一约束:

示例

假设我们使用以下语句创建了一个名为 persons 的表

创建表后,我们需要向此表添加唯一约束。在这种情况下,以下 ALTER 语句将向 email 列添加唯一约束:

类似地,以下语句将向 phone 列添加唯一键:

我们可以按如下方式验证唯一约束,该约束显示已成功添加 uniq_email 和 uniq_phone 键:

SQL Server Unique Key

如何从表中删除唯一键?

SQL Server 使用 ALTER TABLE 语句从表中删除唯一键。我们可以使用以下语法删除唯一键:

示例

假设我们想从 person 表中删除 uniq_phone 唯一约束。我们可以按以下语句执行此操作:

验证表,我们看到 uniq_phone 已成功删除:

SQL Server Unique Key

如何修改唯一键?

SQL Server 不提供任何直接查询来修改唯一键。因此,如果我们想修改唯一键,我们必须先删除该键,然后再重新创建它来更新它。

唯一键与主键有何不同?

我们知道唯一键和主键约束都保证了数据的唯一性。但是,当我们要保证非主键列或列集的唯一性时,应该使用唯一键而不是主键。它们之间的主要区别在于,主键标识表中的每个记录,而唯一键除了 NULL 值外,还可以防止列中出现重复条目。以下是一些更多差异:

  • 在关系数据库中,一个表不能有多个主键,但可以有多个唯一键。
  • 主键列不能为 NULL。但是,唯一键列可以,尽管每个表只允许一个 NULL。
  • 主键应该是唯一的,但唯一键不一定是主键。

以下示例解释了它们的区别,我们在其中插入 email 列值为 NULL 的记录:

让我们使用以下查询向 email 列插入另一个 NULL 值:

SQL Server 抛出错误消息:

SQL Server Unique Key

结论

本文将全面概述唯一键约束。它解释了如何使用 SQL Server 唯一键来保证列或列组中的数据是唯一的。此外,唯一键与主键的区别。