PostgreSQL 唯一索引

17 Mar 2025 | 5 分钟阅读

在本节中,我们将了解唯一索引的工作原理,该索引用于确保各种列中数据的唯一性。

PostgreSQL 唯一索引示例,以及使用单列和多列 PostgreSQL 唯一索引的示例。

什么是 PostgreSQL 唯一索引?

PostgreSQL中,唯一索引用于确保一个或多个列中数据值的唯一性。

换句话说,我们可以说唯一索引是为了获得数据完整性和提高性能而生成的。它不允许我们在表中插入重复的值。

如果为一列指定唯一索引,则该列不能存储具有相似值的多行。

如果为多个列指定唯一索引,则这些列中的组合值不能在多行中复制。

并且,如果我们为特定表指定唯一约束或主键,PostgreSQL 会自动生成一个类似的唯一索引。

正如我们已经知道的,PostgreSQL 将 NULL 视为不同的值。因此,它可以在具有唯一索引的列中包含多个 NULL 值。

PostgreSQL 创建唯一索引命令的语法

创建唯一索引命令的语法如下

PostgreSQL 唯一索引的示例

让我们看一个示例来理解PostgreSQL CREATE 唯一索引命令的工作原理。

我们正在创建一个新表,命名为Consumer,并使用CREATE命令的帮助,并使用INSERT 命令插入一些值。

要将Consumer创建到组织数据库中,我们使用 CREATE 命令。

但是,在创建Consumer表之前,如果组织数据库中已经存在类似的表,我们将使用DROP TABLE 命令

输出

执行以上命令后,我们将收到以下窗口消息:Consumer表不存在。

PostgreSQL UNIQUE Index

Consumer表包含各种列,例如consumer_id、first_name、last_nameMobile_number列,其中consumer_id主键列。对于Mobile_number列,我们使用了唯一约束

因此,PostgreSQL 将创建两个唯一索引,每个列一个。

输出

执行以上命令后,我们将收到以下消息:Consumer表已成功创建到组织数据库中。

PostgreSQL UNIQUE Index

如果我们想显示Consumer表的索引,可以使用以下命令

输出

执行以上命令后,我们将获得以下输出,其中显示了Consumer表中所有索引的详细信息。

PostgreSQL UNIQUE Index

在 PostgreSQL 唯一索引部分,我们还将看到单列和多列索引的示例

使用单列 PostgreSQL 唯一索引的示例

在下面的示例中,我们尝试使用ALTER table 命令将一个新列作为Email列添加到Consumer表中,如以下命令所示

输出

执行上述命令后,我们将收到以下消息:邮件列已成功添加到Consumer

PostgreSQL UNIQUE Index

我们将为邮件列指定唯一索引,以确保所有消费者都使用不同的电子邮件,正如我们可以在以下命令中看到的那样

输出

实现以上命令后,我们将收到以下消息:已成功创建 idex_consumer_email 索引。

PostgreSQL UNIQUE Index

成功创建特定索引后,我们将按照以下步骤进行检查

步骤 1:插入新行

首先,我们将使用 INSERT 命令的帮助将新行插入到Consumer表中,如以下命令所示

输出

实现以上命令后,我们将收到以下消息窗口,显示值已成功插入到Consumer表中。

PostgreSQL UNIQUE Index

步骤 2:插入另一新行

现在,我们将尝试插入另一行,其邮件 ID 与 [email protected] 相同:

输出

执行以上命令后,由于邮件 ID 的重复,PostgreSQL 将引发错误,这意味着重复键值违反了唯一约束“idex_consumer_email”,因为Key (email)=([email protected]) 已经存在。

PostgreSQL UNIQUE Index

使用多列 PostgreSQL 唯一索引的示例

在下面的示例中,我们将使用 ALTER table 命令的帮助将两个新列作为地址和工作地址列添加到Consumer表中,如以下命令所示

输出

执行上述命令后,我们将收到以下消息:地址和工作地址列已成功添加到Consumer表中。

PostgreSQL UNIQUE Index

注意:多个消费者可以拥有类似的工作地址,但他们不能拥有类似的地址,此处,地址指的是家庭住址。

因此,在这种情况下,我们可以在地址和工作地址列上指定唯一索引,如以下命令所示

输出

实现以上命令后,我们将收到以下消息:已成功创建 idex_consumer_address 唯一索引

PostgreSQL UNIQUE Index

现在,我们将按照以下步骤测试索引的工作

步骤 1:插入新行

首先,我们将使用 INSERT 命令的帮助将新行插入到Consumer表中,如以下命令所示

输出

执行上述命令后,我们将收到以下消息窗口,显示值已成功插入到Consumer表中。

PostgreSQL UNIQUE Index

步骤 2:插入另一新行

现在,我们将尝试插入另一行,其工作地址相同,但地址不同,正如我们可以在以下命令中看到的那样

输出

实现以上命令后,我们将收到以下消息窗口:特定值已成功插入,因为地址和工作地址列中的值组合是唯一的。

PostgreSQL UNIQUE Index

步骤 3:再次插入另一个新行

在此步骤中,我们将插入另一新行,该行具有与Consumer表中已存在的地址和工作地址列相似的值,正如我们可以在以下命令中看到的那样

输出

执行上述命令后,由于地址和工作地址的重复,PostgreSQL 将引发错误,这意味着重复键值违反了唯一约束“idex_consumer_address”,因为Key (address, work_address)=(洛杉矶,布鲁克林) 已经存在。

PostgreSQL UNIQUE Index

概述

PostgreSQL 唯一索引部分,我们学习了以下主题

  • PostgreSQL 唯一索引用于确保一个或多个列中数据值的唯一性。
  • PostgreSQL 创建唯一索引命令用于使用示例创建唯一索引。
  • 我们还看到了使用单列和多列 PostgreSQL 唯一索引的示例。