PostgreSQL Unique Index唯一索引

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

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

什么是 PostgreSQL Unique Index 唯一索引?

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

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

如果我们为一列指定了 UNIQUE 索引,那么该列就不能存储具有相似值的多行。

如果我们为多个列指定UNIQUE 索引,那么这些列中的组合值将无法复制到各个行中。

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

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

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

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

CREATE UNIQUE INDEX index_name    
on table_name (column_name);  

PostgreSQL Unique Index唯一索引示例

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

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

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

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

DROP TABLE IF EXISTS Consumer;  

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

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

因此,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数据库中。

如果我们想显示消费者表的索引,我们可以使用下面的命令:

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

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

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

PostgreSQL UNIQUE 索引的示例

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

ALTER TABLE Consumer  
ADD email VARCHAR(255);  

我们将在执行上述命令时收到以下消息:电子邮件列已添加到Consumer表中成功地。

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

CREATE UNIQUE INDEX idex_consumer_email  
ON Consumer(email);  

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

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

第1步:插入新行

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

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

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

第2步:插入另一个新行

现在,我们将尝试插入与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 ) 已经存在。

热门文章

优秀文章