PostgreSQLUNIQUEIndex-PostgreSQL教程|
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表不存在。
该消费者表包含各列如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数据库中。
如果我们想显示Consumer表的索引,我们可以使用以下命令:
SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE tablename = 'consumer';
输出
执行上述命令后,我们将得到以下输出,其中显示了Consumer表中的所有索引详细信息。
在 PostgreSQL UNIQUE Index部分,我们还将看到单列和多列索引的示例:
使用单列 PostgreSQL UNIQUE 索引的示例
在下面的示例中,我们尝试使用ALTER table 命令将一个新列作为Email列添加到Consumer表中,如下面的命令所示:
ALTER TABLE Consumer
ADD email VARCHAR(255);
输出
执行上述命令后,我们将收到以下消息: email 列已添加到Consumer表中 成功地。
我们将为email 列指定一个UNIQUE 索引,以确保所有消费者的电子邮件都不同,如我们在以下命令中所见:
CREATE UNIQUE INDEX idex_consumer_email
ON Consumer(email);
输出
执行上述命令后,我们将得到以下消息:idex_consumer_email索引已成功创建。
成功创建特定索引后,我们将按照以下步骤检查以下内容:
Step1:插入新行
首先,我们将使用INSERT命令的帮助在Consumer表中插入一个新行,如以下命令所示:
INSERT INTO Consumer(first_name, last_name, mobile_number, email)
VALUES ('Mike','Ross', '(305)-444-5432','mike@javatpoint.com');
输出
执行上述命令后,我们将得到如下消息窗口,显示值已成功插入到消费者表中。
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 索引的示例
在下面的示例中,我们将使用 ALTER table 命令的帮助将两个新列作为address 和 work_address列添加到Consumer表中,如以下命令所示:
ALTER TABLE Consumer
ADD address VARCHAR(255),
ADD Work_address VARCHAR(200);
输出
执行上述命令后,我们将得到以下消息:address 和 work_address。该列已成功添加到Consumer表中。
注意:几个消费者可以有一个相似的工作地址,但他们不能有一个相似的地址,这里的地址是指家庭地址。
因此,在这种情况下,我们可以在address 和 work_address列上指定一个 UNIQUE 索引,如下面的命令所示:
CREATE UNIQUE INDEX idex_consumer_address
ON Consumer(address, work_address);
输出
执行上述命令后,我们会得到如下信息:idex_consumer_address UNIQUE Index已经创建成功。
现在,我们将按照以下步骤来测试索引的工作情况:
Step1:插入新行
首先,我们将使用INSERT命令的帮助在Consumer表中插入一个新行,如以下命令所示:
INSERT INTO Consumer(first_name, last_name, address, work_address)
VALUES ('Olivia','Smith','Los Angeles','Brookline');
输出
在执行上述命令时,我们将获得以下消息窗口,其中显示值已成功插入到Consumer表中。
Step2:插入另一个新行
现在,我们将尝试插入具有相同work_address和不同address 的另一行,如下面的命令所示:
INSERT INTO Consumer(first_name, last_name, address, work_address)
VALUES ('William','Smith','Los Angeles','Brookline');
输出
执行上述命令后,我们将得到以下消息窗口:特定值已成功插入,因为address 和 work_address列中的值组合是唯一的。
步骤 3:再次插入另一个新行
在这一步中,我们将插入另一个新行,它对于已经存在于Consumer表中的address和work_address列具有相似的值,如我们在以下命令中所见:
- INSERT INTO Consumer(first_name, last_name, address, work_address)
- 值 ('威廉' ,'史密斯' ,'洛杉矶' ,'布鲁克林' );
输出
在执行上述命令时,PostgreSQL 会因为地址和工作地址的副本而引发错误,这意味着重复的键值违反了唯一约束“idex_consumer_address”,因为Key (address, work_address)=(Los Angeles, Brookline) 已经存在。
概述
在PostgreSQL UNIQUE Index部分,我们学习了以下主题:
- PostgreSQL的UNIQUE Index被用于确保在一列或多列的数据值的唯一性。
- 所述的PostgreSQL创建UNIQUE Index命令用来创建与它的一个例子的UNIQUE Index。
- 我们还看到了使用单列和多列PostgreSQL UNIQUE 索引的示例。
相关文章:
- [PostgreSQL教程]PostgreSQL教程-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL特性-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL版本-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL语法-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL选择数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除数据库-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL创建表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL删除/删除表-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL显示表-PostgreSQL教程|
相关推荐:
- [PostgreSQL教程]PostgreSQL与SQLite-PostgreSQL教程|
- [PostgreSQL教程]MongoDB与PostgreSQL-PostgreSQL教程|
- [PostgreSQL教程]psqlcommands-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLDate&TimeFunction-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLFunctions-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL禁用触发器-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL左连接-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLANDCondition-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL获取子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQL与SQLServer-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLEXCEPT-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- psqlcommands-PostgreSQL教程|
- PostgreSQLDate&TimeFunction-PostgreSQL教程|
- PostgreSQL删除触发器-PostgreSQL教程|
- PostgreSQLOrderby子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLAlias-PostgreSQL教程|
- PostgreSQLNot-NullConstraint-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|