PostgreSQL 唯一约束

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

PostgreSQL唯一约束示例,如何在多列上创建唯一约束,使用唯一索引添加唯一约束,以及如何删除特定表的唯一约束。

什么是 PostgreSQL 唯一键约束?

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

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

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

例如

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

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

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

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

唯一约束 VS 主键

唯一约束和主键的主要区别如下:

Unique Constraint Primary Key
如果值的组合是唯一的,则与唯一约束相关的一些字段可以具有空值。 与主键相关的字段都不能包含空值。

如何在 PostgreSQL 中创建唯一约束

我们可以在以下命令的帮助下创建PostgreSQL 唯一约束:

  • 创建表命令
  • 更改表命令

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

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

在 PostgreSQL 中,我们可以在CREATE TABLE 命令的帮助下生成一个唯一约束。

创建唯一约束的语法

第一种语法用于为表中的一列创建唯一约束:

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

我们可以使用第二个插图为表中的多个列创建唯一约束:

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

在上面的语法中,我们使用了以下参数,我们在下表中进行了讨论:

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

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

要了解PostgreSQL 唯一约束的工作原理,我们将看到以下示例。

在下面的示例中,我们创建了一个名为Customers的新表,其中包含多个列,例如Customer_ID、Customer_name、Address和email_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)  
);  

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

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

成功创建新表作为Customers后,我们将在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');    

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

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

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

执行完上面的insert命令后,PostgreSQL报错,如下:

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

热门文章

优秀文章