PostgreSQL UNIQUE Index


PostgreSQL UNIQUE Index

在本节中,我们将了解UNIQUE 索引的工作原理,索引用于确保各列中数据的个性化。

实施例的的PostgreSQL的UNIQUE Index,和参见实施例使用的单和多列的PostgreSQLUNIQUE Index。

什么是 PostgreSQL UNIQUE Index?

在PostgreSQL 中,UNIQUE 索引用于确保数据值在一列或几列中的唯一性。

换句话说,我们可以说生成UNIQUE Index是为了获得数据完整性和提高性能。并且它不允许我们在表中插入重复值。

如果我们为一列指定 UNIQUE 索引,则该列不能存储具有相似值的各种行。

如果我们为多个列指定UNIQUE 索引,那么这些列中的组合值不能在不同的行中复制。

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

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

PostgreSQL 创建UNIQUE Index命令的语法

创建UNIQUE Index命令的语法如下:

CREATE UNIQUE INDEX index_name    
on table_name (column_name);

PostgreSQL UNIQUE Index示例

让我们看一个示例来了解PostgreSQL CREATE Unique Index命令的工作。

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

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

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

DROP TABLE IF EXISTS Consumer;

输出

执行上述命令后,我们会得到如下窗口信息:Consumer\表不存在。

PostgreSQL UNIQUE Index

消费者\表包含各列如consumer_id,名字,姓氏,和MOBILE_NUMBER的列,其中consumer_id主键列。对于Mobile_number列,我们使用了唯一约束

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

CREATE TABLE Consumer (  
    consumer_id SERIAL PRIMARY KEY,  
    first_name VARCHAR(255) NOT NULL,  
    last_name VARCHAR(255) NOT NULL,  
    Mobile_number VARCHAR(20) UNIQUE  
);

输出

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

PostgreSQL UNIQUE Index

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

SELECT tablename, indexname, indexdef   
FROM pg_indexes   
WHERE tablename = 'consumer';

输出

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

PostgreSQL UNIQUE Index

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

使用单列 PostgreSQL UNIQUE 索引的示例

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

ALTER TABLE Consumer  
ADD email VARCHAR(255);

输出

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

PostgreSQL UNIQUE Index

我们将为email 列指定一个UNIQUE 索引,以确保所有消费者的电子邮件都不同,如我们在以下命令中所见:

CREATE UNIQUE INDEX idex_consumer_email  
ON Consumer(email);

输出

执行上述命令后,我们将得到以下消息:idex_consumer_email索引已成功创建。

PostgreSQL UNIQUE Index

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

Step1:插入新行

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

INSERT INTO Consumer(first_name, last_name, mobile_number, email)  
VALUES ('Mike','Ross', '(305)-444-5432','mike@javatpoint.com');

输出

执行上述命令后,我们将得到如下消息窗口,显示值已成功插入到消费者\表中。

PostgreSQL UNIQUE Index

Step2:插入另一个新行

现在,我们将尝试插入与mike@javatpoint.com具有相同电子邮件 ID 的另一行

INSERT INTO Consumer(first_name, last_name, mobile_number, email)  
VALUES ('Mike','Taylor','(305)-333-9876','mike@javatpoint.com');

输出

在执行上述命令时,PostgreSQL 会因为email id的副本而引发错误,这意味着重复的键值违反了唯一约束“idex_consumer_email”,因为Key (email)=(mike@javatpoint.com) 已经存在。

PostgreSQL UNIQUE Index

使用多列 PostgreSQL UNIQUE 索引的示例

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

ALTER TABLE Consumer  
ADD address VARCHAR(255),  
ADD Work_address VARCHAR(200);

输出

执行上述命令后,我们将得到以下消息:address 和 work_address。该列已成功添加到Consumer\表中。

PostgreSQL UNIQUE Index

注意:几个消费者可以有一个相似的工作地址,但他们不能有一个相似的地址,这里的地址是指家庭地址。

因此,在这种情况下,我们可以在address 和 work_address列上指定一个 UNIQUE 索引,如下面的命令所示:

CREATE UNIQUE INDEX idex_consumer_address  
ON Consumer(address, work_address);

输出

执行上述命令后,我们会得到如下信息:idex_consumer_address UNIQUE Index已经创建成功。

PostgreSQL UNIQUE Index

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

Step1:插入新行

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

INSERT INTO Consumer(first_name, last_name, address, work_address)  
VALUES ('Olivia','Smith','Los Angeles','Brookline');

输出

在执行上述命令时,我们将获得以下消息窗口,其中显示值已成功插入到Consumer\表中。

PostgreSQL UNIQUE Index

Step2:插入另一个新行

现在,我们将尝试插入具有相同work_address和不同address 的另一行,如下面的命令所示:

INSERT INTO Consumer(first_name, last_name, address, work_address)  
VALUES ('William','Smith','Los Angeles','Brookline');

输出

执行上述命令后,我们将得到以下消息窗口:特定值已成功插入,因为address 和 work_address列中的值组合是唯一的。

PostgreSQL UNIQUE Index

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

在这一步中,我们将插入另一个新行,它对于已经存在于Consumer表中的addresswork_address列具有相似的值,如我们在以下命令中所见:

  1. INSERT INTO Consumer(first_name, last_name, address, work_address)
  2. ('威廉' ,'史密斯' ,'洛杉矶' ,'布鲁克林' );

输出

在执行上述命令时,PostgreSQL 会因为地址和工作地址的副本而引发错误这意味着重复的键值违反了唯一约束“idex_consumer_address”,因为Key (address, work_address)=(Los Angeles, Brookline) 已经存在。

PostgreSQL UNIQUE Index

概述

PostgreSQL UNIQUE Index部分,我们学习了以下主题:

  • PostgreSQL的UNIQUE Index被用于确保在一列或多列的数据值的唯一性。
  • 所述的PostgreSQL创建UNIQUE Index命令用来创建与它的一个例子的UNIQUE Index。
  • 我们还看到了使用单列和多列PostgreSQL UNIQUE 索引的示例。