PostgreSQL Unique Constraint PostgreSQL Foreign Key PostgreSQL CHECK 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、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) ); 或者 我们可以使用以下命令来创建客户\表: CREATE TABLE Customers ( Customer_id SERIAL PRIMARY KEY, Customer_name VARCHAR (25), Address VARCHAR(25), email_id VARCHAR (50) UNIQUE ); 输出 执行上述命令后,我们将得到如下消息窗口,显示Customers\表已成功创建到jtp数据库中。 在以客户\身份成功创建新表后,我们将在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'); 输出 在执行上述命令时,我们将得到以下消息窗口,其中显示四个值已成功插入到客户\表中。 现在,我们将在客户\表中插入具有重复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) 已经存在。 在多列上生成Unique Constraint 让我们看一个示例示例,以了解PostgreSQL Unique 约束在多列上的工作。 假设我们要在多个列上指定主键;在这种情况下,我们可以看到下面的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数据库中。 使用 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\数据库中。 Step2:创建唯一索引 创建Student\表后,我们将基于Student_email列创建一个新索引。 CREATE UNIQUE INDEX CONCURRENTLY Student_Student_email ON Student(Student_email); 输出 执行上述命令后,我们将看到以下消息窗口,显示特定索引已成功创建。 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 提出了一个通知,它说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 和 active的State 列。和空闲状态定义,这些都是未完成的事务。 如何删除 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部分,我们学习了以下主题: 我们已使用CREATE TABLE命令为特定表创建Unique Constraint。 我们已经理解了使用CREATE TABLE改变 PostgreSQL Unique Constraint的概念 我们使用PostgreSQL 唯一索引向现有表添加了Unique Constraint。 我们已经使用ALTER TABLE命令从特定表中删除Unique Constraint。 PostgreSQL Foreign Key PostgreSQL CHECK Constraint