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 ) 已经存在。
热门文章
优秀文章