PostgreSQL Unique Constraint


PostgreSQL Unique Constraint

在本节中,我们将了解PostgreSQL UNIQUE 约束的工作原理,约束用于确保表的列中的所有值都是独占的。

例子中的PostgreSQL的Unique Constraint,如何创建一个Unique Constraint多列,加入了独特的约束使用唯一索引,并且还看到如何删除一个Unique Constraint这个特定表。

什么是 PostgreSQL 唯一键约束?

在PostgreSQL 中,UNIQUE CONSTRAINT用于维护我们存储到表的字段或列中的值的个性化。它与一组列约束或列约束和一个表约束兼容。

当我们使用Unique Constraint时,一个或多个列上的索引会自动生成。如果我们将两个不同的空值添加到不同行的列中,它不会中断 UNIQUE 约束的规范。

有时,如果我们想确保存储在一个列或多个列中的值在整个表中是唯一的,那么一列不能存储重复值

例如

  • 电话号码的客户应该是唯一的列客户端\
  • 卷号码电子邮件地址应该是唯一列学生\

当我们使用UNIQUE 约束时,每次我们插入新行时,它都会检查该值是否已经在表中,如果该值已经存在,则拒绝修改并引发错误。更新当前数据时将遵循类似的步骤。

为什么我们需要在 PostgreSQL 中使用 Unique 约束

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

Unique Constraint VS 主键

Unique Constraint和主键的主要区别如下:

Unique Constraint 首要的关键
如果值的组合是唯一的,则与Unique Constraint相关的某些字段可以具有空值。 与主键相关的任何字段都不能包含空值。

如何在 PostgreSQL 中创建Unique Constraint

我们可以在以下命令的帮助下创建PostgreSQL Unique Constraint

  • CREATE TABLE command
  • ALTER TABLE command

现在,我们正在详细讨论这两个命令。

使用 CREATE TABLE 命令创建Unique Constraint

在 PostgreSQL 中,我们可以使用CREATE TABLE 命令的帮助生成Unique Constraint

创建Unique Constraint的语法

下图用于显示我们如何使用 CREATE TABLE 命令创建Unique Constraint

第一种语法用于为表中的一列创建Unique Constraint

CREATE TABLE table_name(    
col1 datatype,    
col2 datatype UNIQUE,    
 ...    
);

或者

我们可以使用第二个插图为表中的列创建Unique Constraint

CREATE TABLE table_name(    
col1 col_definition,    
col2 col_definition,    
...    
[CONSTRAINT constraint_name]    
UNIQUE(column_name(s))    
);

注意:如果我们没有定义唯一的约束名称,PostgreSQL 会自动为特定的列创建一个名称。因此,建议在生成表时使用约束名称。

参数说明

在上述语法中,我们使用了以下参数,我们在下表中讨论了这些参数:

参数名称 描述
Table_name 它是我们要创建的表的名称。
column1, column2 这些是我们在表中创建的列。
constraint_name 约束名称参数用于指定Unique Constraint的名称。
Column_name(s) 这些是将成为Unique Constraint的列。

使用 Create 命令的 PostgreSQL Unique Constraint示例

要了解PostgreSQL Unique Constraint的工作原理,我们将看到以下示例。

在下面的示例中,我们创建了一个名为Customers\的新表,其中包含多个列,例如Customer_ID、Customer_name、Addressemail_ID

email_id是 Unique 列,它对Customer\表中的email id进行唯一分类。

CREATE TABLE Customers (  
    Customer_id SERIAL PRIMARY KEY,  
    Customer_name VARCHAR (25),  
Address VARCHAR(25),  
    email_id VARCHAR (50),   
UNIQUE (email_id)  
);

或者

我们可以使用以下命令来创建客户\表:

CREATE TABLE Customers (  
    Customer_id SERIAL PRIMARY KEY,  
    Customer_name VARCHAR (25),  
Address VARCHAR(25),  
    email_id VARCHAR (50) UNIQUE  
);

输出

执行上述命令后,我们将得到如下消息窗口,显示Customers\表已成功创建到jtp数据库中。

PostgreSQL Unique Constraint

在以客户\身份成功创建新表后,我们将在INSERT命令的帮助下向其中输入一些值。

INSERT INTO Customers(Customer_name, Address, email_id)     
VALUES ('Chris Johnson', 'Los Angeles', 'Chris11@javatpoint.com'),     
(' Daniel Rodriguez', 'San Diego', 'Rodriguezdan25@javatpoint.com'),  
('Isabella Smith', 'Dallas', 'Smithisa444@javatpoint.com'),  
('Penelope Brown', 'Seattle', 'Penelope194@javatpoint.com');

输出

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

PostgreSQL Unique Constraint

现在,我们将在客户\表中插入具有重复email_id 的另一行,如下面的语句所示:

INSERT INTO Customers(Customer_name, Address, email_id)     
VALUES ( 'Savannah Smith', 'Boston', 'Smithisa444@javatpoint.com');

输出

执行完上面的insert命令后,PostgreSQL发出错误信息,内容如下:

错误:重复键值违反Unique Constraint“customers_email_id_key”详细信息:键 (email_id)=(Smithisa444@javatpoint.com) 已经存在。

PostgreSQL Unique Constraint

在多列上生成Unique Constraint

让我们看一个示例示例,以了解PostgreSQL Unique 约束在多列上的工作。

假设我们要在多个列上指定主键;在这种情况下,我们可以看到下面的Create 命令示例,它帮助我们生成一个新表作为Customer_info。\

并且**Cust_username 和 Cust_email列中的值组合在整个表中将是唯一的。Cust_usernameCust_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 Unique Constraint

使用 ALTER TABLE 命令创建Unique Constraint并使用唯一索引添加Unique Constraint

我们可以借助ALTER TABLE命令的帮助在 PostgreSQL 中生成Unique Constraint,也可以使用PostgreSQL 唯一索引添加Unique Constraint

创建Unique Constraint的语法

下图用于在 PostgreSQL 中使用ALTER TABLE 命令创建Unique Constraint

ALTER TABLE table_name  
ADD CONSTRAINT [ constraint_name ]  
UNIQUE(column_list);

在上述语法中,我们使用了以下参数,我们在下表中讨论了这些参数:

参数名称 描述
Table_name 它是我们将要修改的表的名称。
Column_list 这些是我们在表中创建的列。
constraint_name 它用于定义唯一的约束名称。

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

在下面的示例中,我们将了解使用ALTER TABLE 命令PostgreSQL Unique Constraint,并按照以下步骤使用唯一索引添加Unique Constraint**。**

Step1:新建表

首先,我们将创建一个名为新表的学生\,其中不包含独特的列表中说明。

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 Unique Constraint

Step2:创建唯一索引

创建Student\表后,我们将基于Student_email列创建一个新索引。

CREATE UNIQUE INDEX CONCURRENTLY Student_Student_email  
ON Student(Student_email);

输出

执行上述命令后,我们将看到以下消息窗口,显示特定索引已成功创建。

PostgreSQL Unique Constraint

Step3:在指定表中添加Unique Constraint

成功创建Student_Student_email索引后,我们将使用 ALTER TABLE 命令的帮助向Student\表添加Unique Constraint,如以下语句所示:

ALTER TABLE Student  
ADD CONSTRAINT unique_Student_email  
UNIQUE USING INDEX Student_Student_email;

输出

执行上述命令时,我们将看到以下消息窗口:Student\表已成功更改。

PostgreSQL Unique Constraint

在上面的截图中,我们可以看到 PostgreSQL 提出了一个通知,它说ALTER TABLE / ADD CONSTRAINT USING INDEX 会将索引“student_student_email”重命名为“unique_student_email”。

笔记:

  • ALTER TABLE命令获得关于表的排他锁。如果我们有任何未完成的事务,它将在更改表之前等待所有事务完成。
  • 要查看现有的未完成交易,我们应该在以下命令的帮助下检查pg_stat_activity表:
SELECT   
datid, datname, usename, state  
FROM pg_stat_activity;

输出

执行上述命令后,我们将得到以下输出,在此我们可以找到事务中值为idle 和 activeState 列。和空闲状态定义,这些都是未完成的事务

PostgreSQL Unique Constraint

如何删除 PostgreSQL Unique Constraint

在 PostgreSQL 中,我们可以借助ALTER TABLE命令删除Unique Constraint。

删除Unique Constraint的语法

下图用于在 PostgreSQL 中使用 ALTER TABLE 命令删除Unique Constraint:

ALTER TABLE table_name    
DROP CONSTRAINT constraint_name;

在上述语法中,我们使用了以下参数,我们在下表中讨论了这些参数:

范围 描述
table_name 表名参数用于指定表名,需要修改。
constraint_name 约束名称参数用于定义我们要删除的Unique Constraint名称。

使用 ALTER TABLE 命令删除 PostgreSQL Unique Constraint的示例

让我们看一个从特定表中删除Unique Constraint的示例示例。

为此,我们使用ALTER TABLE命令的帮助,使用Customer_info\表删除Unique Constraint,如下面的语句所示:

ALTER TABLE Customer_info  
DROP CONSTRAINT uc_Cust_username_Cust_email;

输出

成功执行上述命令后,我们将看到以下消息窗口,显示Unique Constraint (uc_Cust_username_Cust_email)已从Customer_info\表中删除。

PostgreSQL Unique Constraint

概述

PostgreSQL Unique Constraint部分,我们学习了以下主题:

  • 我们已使用CREATE TABLE命令为特定表创建Unique Constraint
  • 我们已经理解了使用CREATE TABLE改变 PostgreSQL Unique Constraint的概念
  • 我们使用PostgreSQL 唯一索引向现有表添加了Unique Constraint。
  • 我们已经使用ALTER TABLE命令从特定表中删除Unique Constraint