PostgreSQL教程

PostgreSQL 唯一约束

在本节中,我们将了解 PostgreSQL UNIQUE约束的工作原理,该约束用于确保所有表的列中的值是互斥的。
示例 PostgreSQL唯一约束,如何在多列上创建唯一约束,使用唯一索引添加唯一的约束 ,并了解如何删除唯一约束用于特定表。

什么是PostgreSQL唯一键约束?

在 PostgreSQL , UNIQUE CONSTRAINT 用于维护我们存储在表的字段或列中的值的个性。它与一组列约束或列约束以及表约束兼容。
当我们使用唯一约束时,一个或多个列上的索引会自动生成。如果我们将两个不同的空值添加到不同行的列中,则不会中断UNIQUE约束的规范。
有时,如果我们要确保存储在一个列或多个列中的值在整个列中是唯一的整个表格,则一列无法存储重复值。
例如
客户的电话号码应该是 客户 中的唯一列 卷号和电子邮件地址应该是 学生 中的唯一列/strong>
使用 UNIQUE约束后,每次插入新行时,它都会检查表中是否已存在该值,如果修改了该值,则会拒绝该修改并引发错误值已经存在。并且在更新当前数据时将遵循类似的步骤。

为什么我们需要在PostgreSQL中使用"唯一"约束

唯一性约束可以在表中包含空值。 为避免两条记录将相同的值存储到列中,唯一约束非常有用。 它还与外键一起使用以维护表的唯一性。 在PostgreSQL中,唯一约束仅包含不同的值,这些值保留了用于以有组织方式检索信息的数据库的可靠性和完整性。

唯一约束与主键

唯一约束与主键之间的主要区别如下:
唯一约​​束 主键
如果值的组合是唯一的,则与唯一约束相关的某些字段可以具有空值。 与主键相关的任何字段都不能包含空值。

如何在PostgreSQL中创建唯一约束

我们可以借助以下命令来创建 PostgreSQL唯一约束:
CREATE TABLE命令 ALTER TABLE命令
现在,我们将详细讨论这两个命令。

使用CREATE TABLE命令创建唯一约束

在PostgreSQL中,我们可以使用 CREATE TABLE命令的帮助来生成唯一约束。
创建唯一约束的语法
以下插图用于显示如何使用CREATE TABLE命令创建唯一约束:
第一种语法用于为表中的一列创建唯一约束:
CREATE TABLE table_name(  
col1 datatype,  
col2 datatype UNIQUE,  
 ...  
);  
OR
我们可以使用第二个插图为表中的多个列创建 Unique Constraint :
CREATE TABLE table_name(  
col1 col_definition,  
col2 col_definition,  
...  
[CONSTRAint constraint_name]  
UNIQUE(column_name(s))  
);  
注意: 如果我们没有定义唯一的约束名称,PostgreSQL会自动为特定的列创建一个名称。因此,建议在生成表时使用约束名称。
参数说明
在以上语法中,我们使用了下表中讨论的以下参数:
参数名称 说明
table_name 这是我们要创建的表的名称。
col1,col2 这些是我们在表中创建的列。
constraint_name constraint_name参数用于指定唯一约束的名称。
column_name 这些是唯一约束的列。

使用创建命令的PostgreSQL唯一约束的示例

要了解 PostgreSQL唯一约束的工作原理,,我们将看到以下示例。
在下面的示例中,我们创建一个名为 Customers 的新表,该表包含多列,例如 Customer_ID,Customer_name,地址和电子邮件ID 。
电子邮件ID 是"唯一"列,该列唯一地对电子邮件进行分类客户 表中的ID 。
CREATE TABLE Customers (
  Customer_id SERIAL PRIMARY KEY,
  Customer_name VARCHAR (25),
Address VARCHAR(25),
  email_id VARCHAR (50), 
UNIQUE (email_id)
);
OR
我们可以使用以下命令创建 Customers 表:
CREATE TABLE Customers (
  Customer_id SERIAL PRIMARY KEY,
  Customer_name VARCHAR (25),
Address VARCHAR(25),
  email_id VARCHAR (50) UNIQUE
);
输出
执行以上命令后,我们将获得以下消息窗口,其中显示 Customers strong>表已成功创建到 jtp 数据库中。
PostgreSQL唯一约束
在成功创建为 Customers 的新表之后,我们将在 INSERT 命令的帮助下向其中输入一些值。
INSERT INTO Customers(Customer_name, Address, email_id)   
VALUES ('Chris Johnson', 'Los Angeles', 'Chris11@lidihuo.com'),   
(' Daniel Rodriguez', 'San Diego', 'Rodriguezdan25@lidihuo.com'),
('Isabella Smith', 'Dallas', 'Smithisa444@lidihuo.com'),
('Penelope Brown', 'Seattle', 'Penelope194@lidihuo.com');  
输出
在执行上述命令时,我们将获得以下消息窗口,该窗口显示四个值已成功插入进入 Customers 表。
PostgreSQL唯一约束
现在,我们将在 Customers 表中插入另一行,其中重复的 email_id ,如以下语句所示:
INSERT INTO Customers(Customer_name, Address, email_id)   
VALUES ( 'Savannah Smith', 'Boston', 'Smithisa444@lidihuo.com');
输出
执行上述插入命令后,PostgreSQL发出错误消息,如下所示:
错误: 重复键值违反了唯一约束" customers_email_id_key"详细信息: 键(email_id)=(Smithisa444@lidihuo.com)已存在。
PostgreSQL唯一约束

在多个列上生成唯一约束

让我们看一个示例示例,了解 PostgreSQL唯一的工作原理
假设我们要在多列上指定主键;在这种情况下,我们可以看到下面的 Create命令示例,它可以帮助我们生成一个新表,作为 Customer_info。
并且在整个表中, Cust_username和Cust_email 列中的值组合将是唯一的。 Cust_username 和 Cust_email 列的值不必唯一。
CREATE TABLE Customer_info (  
    Cust_ID SERIAL,   
    Cust_Username VARCHAR(45),  
    Cust_name  VARCHAR (50) NOT null,   
    Cust_email VARCHAR (50),  
    Cust_address VARCHAR (30),
    CONSTRAint uc_Cust_username_Cust_email 
Unique(Cust_username, Cust_email)  
);  
输出
执行上述命令后,我们将获得以下消息窗口,其中显示 Customer_info 表已成功创建到 Jtp 数据库中。
PostgreSQL唯一约束

使用ALTER TABLE命令创建唯一约束,并使用唯一索引添加唯一约束

我们可以在PostgreSQL中使用以下方法生成唯一约束: ALTER TABLE 命令的帮助,我们还可以使用 PostgreSQL唯一索引添加唯一约束。
创建唯一的语法约束
下面的插图用于通过 PostgreSQL中的ALTER TABLE命令:
ALTER TABLE table_name
ADD CONSTRAint [ constraint_name ]
UNIQUE(column_list);  
在上面的语法中,我们使用了以下参数,这些参数在下表中进行了讨论:
参数名称 说明
table_name 这是我们将要修改的表的名称。
Column_list 这些是我们在表中创建的列。
constraint_name 它用于定义唯一约束名称。

PostgreSQL的示例使用ALTER TABLE命令并使用唯一索引添加唯一约束

在下面的示例中,我们将了解 PostgreSQL唯一约束与 ALTER TABLE命令一起使用,并按照以下步骤使用唯一索引添加唯一约束。
第1步: 创建新表
首先,我们将创建一个名为 Student 的新表,在表说明中不包含唯一列。
CREATE TABLE Student (  
Student_ID int NOT null,   
First_name VARCHAR(45),
Last_name VARCHAR(50),   
Student_Age INT,   
Student_email VARCHAR(25) ,
Student_roll_no INT
 );  
输出
实施上述命令后,我们将获得以下消息窗口,其中显示 Student 表已成功创建到 Jtp 数据库中。
PostgreSQL唯一约束
第2步: 创建唯一索引
创建 Student 表后,我们将基于 Student_email 列创建一个新索引。
要获取有关PostgreSQL唯一索引的更多信息,请参考以下链接:
CREATE UNIQUE INDEX CONCURRENTLY Student_Student_email
ON Student(Student_email);
输出
执行上述命令后,我们将获得以下消息窗口,显示特定的 index 已成功创建。
PostgreSQL唯一约束
步骤3: 将唯一约束添加到"指定"表
成功创建 Student_Student_email 索引后,我们将使用 Student 表向 Student 表添加唯一约束ALTER TABLE命令的帮助,如以下语句所示:
ALTER TABLE Student
ADD CONSTRAint unique_Student_email
UNIQUE USING INDEX Student_Student_email;
输出
在执行上述命令时,我们将获得以下消息窗口: Student 表已成功更改。
PostgreSQL唯一约束
在上面的屏幕截图中,我们可以看到PostgreSQL发出一条通知,说使用索引更改表/添加约束将把索引" student_student_email"重命名为" unique_student_email"。
注意:
ALTER TABLE 命令获得对表的排他锁。如果我们有任何不完整的交易,它将在更改表之前等待所有交易完成。 要查看现有的未完成交易,我们应在以下命令的帮助下检查 pg_stat_activity 表:
SELECT 
datid, datname, usename, state
FROM pg_stat_activity;
输出
执行上述命令后,我们将获得以下输出,我们可以在其中找到 State列,其值为 <交易中的strong> idle和active 。并且空闲状态定义为这些交易不完整的交易。
PostgreSQL唯一约束

如何删除PostgreSQL唯一约束

在PostgreSQL中,我们可以借助 ALTER TABLE 删除唯一约束命令。
删除唯一约束的语法
以下插图用于在PostgreSQL中通过ALTER TABLE命令删除唯一约束:
ALTER TABLE table_name  
DROP CONSTRAint constraint_name;  
在上面的语法中,我们使用了以下表中讨论的以下参数:
参数 说明
table_name 表名参数用于指定需要修改的表名。
constraint_name 约束名称参数用于定义要删除的唯一约束名称。
使用ALTER TABLE命令删除PostgreSQL唯一约束的示例
让我们看一个删除唯一约束的示例示例
为此,我们使用 Customer_info 表通过 ALTER TABLE 删除唯一约束命令的帮助,如以下语句所示:
ALTER TABLE Customer_info
DROP CONSTRAint uc_Cust_username_Cust_email;  
输出
成功执行上述命令后,我们将获得以下消息窗口,其中显示唯一约束(uc_Cust_username_Cust_email)已被执行从 Customer_info 表中删除。
PostgreSQL唯一约束

概述

在 PostgreSQL唯一约束部分中,我们学习了以下主题:
我们已使用 CREATE TABLE (创建表)命令为特定表创建唯一约束。 我们已经了解了使用 CREATE TABLE 更改PostgreSQL唯一约束的概念。 我们使用 PostgreSQL唯一索引向现有表添加了唯一约束。 我们已使用 ALTER TABLE 命令从特定表中删除唯一约束。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4