PostgreSQL教程

PostgreSQL 约束

约束用于描述表中数据列的规则。如果约束和数据操作之间存在任何破坏,则该操作将立即终止。这些约束确保了数据库中数据的可靠性和正确性。
在本节中,我们将讨论所有 PostgreSQL约束。
约束可以进一步分为列级别或表级别,其中表级别约束用于整个表,而列级别约束仅用于一列。

在哪里使用约束?

约束是最普遍用于以下领域:
创建后,可以将其添加到表中,也可以暂时将其禁用。 对于单个列,我们可以使用列约束。 在创建表命令的帮助下创建表时,我们也可以声明约束 SQL可以舍弃任何中断明确定义的条件的值。 所有与约束有关的信息都保存在数据字典中。 对于一个或多个列,我们可以使用表约束。 为所有约束分配一个名称。

PostgreSQL约束的类型

让我们看看 PostgreSQL :
PostgreSQL约束
约束 说明
Not Null 此类型的约束用于确保列不能具有 null 值。无法进一步定义名称以生成非空约束。
Check 用于确保表的列或字段中的所有值都满足特定情况,例如必须与布尔表达式匹配。可以通过单独的名称定义Check约束。
Unique 唯一约束用于确保表的列中的所有值都是互斥的。
Primary key 主键是唯一地指定数据库表中的每一行或记录,并确保特定表中没有记录重复。
Foreign key 在PostgreSQL中,外键用于定义表的列或字段中的值等于另一个表的主键的实际值。
Exclusion 此约束用于确保在定义的运算符的帮助下,任意两行链接在精确的列或语句上,并且这些运算符评估之一应返回 Null或False。

Not Null

在非null约束中,默认情况下,列可以保存 Null 值。如果我们不希望一列具有NULL值,那么我们需要解释此列状态的约束,即该特定列现在不接受NULL。始终将其创建为列约束,它表示未知数据,但这并不意味着该数据将为空。
例如
在以下情况下,我们将创建一个名为 Customer 的新表,该表具有五列,例如 Cust_Id,Cust_Name,Cust_Address,Cust_Age和Cust_Salary 。
CREATE TABLE Customer(
Cust_Id int PRIMARY KEY NOT null,
Cust_Name TEXT NOT null, 
Cust_Address CHAR(50),
Cust_Age int NOT null,
Cust_Salary REAL
);

PgAdmin4中的SQL查询

在以下屏幕截图中,我们可以在pgAdmin4中看到以上查询:
PostgreSQL约束

解释

上面的示例显示了已创建表 Customer 的客户,其中Cust_Id,Cust_Name和Cust_Age 列被指定为不接受 null 值。

表结构

执行 select命令后,我们可以看到 Customer 表的表结构。
PostgreSQL约束

CHECK约束

在PostgreSQL中,可以使用单独的名称来定义Check约束。它用于控制要插入的列的值。它允许我们验证将值存储到记录中的条件。如果该语句为假,则数据会破坏约束并且不会保存到表中。
例如
在下面的示例中,创建一个名为 Customer2 的新表,该表包含 5列。
CREATE TABLE Customer2(
Cust_Id int PRIMARY KEY NOT null,
Cust_Name TEXT NOT null, 
Cust_Address CHAR(30),
Cust_Age int NOT null,
Cust_Salary REAL check (Cust_Salary>0)
);

PgAdmin4中的SQL查询

PostgreSQL约束

说明

在上面的示例中,我们在表 Customer2 中的 Cust_SALARY 列中添加了 CHECK > Cust_Salary 列不能包含小于或等于零(0)的任何值。

表结构

执行 select命令后,我们可以看到 Customer2 表的表结构。
PostgreSQL约束

Unique约束

唯一约束用于维护我们存储的值的个性到表的字段或列中。它与一组列约束或列约束以及表约束兼容。
当我们使用唯一约束时,一个或多个列上的索引会自动生成。如果我们将两个不同的空值添加到不同行的列中,但不会中断 UNIQUE 约束的指定。
例如
在下面的示例中,我们将创建一个名为 Customer3 的新表,该表具有与上表中创建的相似的五列。
CREATE TABLE Customer3(
Cust_Id int PRIMARY KEY NOT null,
Cust_Name TEXT NOT null, 
Cust_Address CHAR(30),
Cust_Age int NOT null Unique,
Cust_Salary REAL default 20000.00
);

PgAdmin4中的SQL查询

PostgreSQL约束

说明

上面的示例 Cust_Age 列设置为 UNIQUE; ,因此,我们可以避免两个或两个以上的人重复使用

表结构

执行 select命令后,我们可以看到 Customer3的表结构表。
PostgreSQL约束

Primary key约束

它是表中的一个字段,用于分别标识数据库表中的每一行或记录,并且包含唯一值。主键不包含任何空值。为此,我们也可以说主键是表的唯一和非空约束的集合。
它用于区别数据库表中的每条记录。在这里,我们可以包含其他唯一列,但是数据库表中只有一个主键,并且其中包含单个或多个字段。这是创建数据库表时最关键的键,并且可以是唯一的ID。可以表示为一列或一组列。
主键的工作方式类似于唯一约束。尽管如此,它们之间的显着区别是一张表只能有一个主键;但是,表可以具有一个或多个 unique 和 non-null 约束。
示例
在下面的示例中,我们将创建一个名为 Employee 的新表,其中包含四个列,例如 Emp_Id,Emp_ Name,Emp_Address和Emp_Age 。
CREATE TABLE Employee(
Emp_Id int PRIMARY KEY NOT null,
Emp_Name TEXT NOT null, 
Emp_Address CHAR(30),
Emp_Age int NOT null
);

PgAdmin4中的SQL查询

PostgreSQL约束

说明

上面的示例 Employee 表是使用一个主键作为Emp_Id 列创建的,该列代表雇员ID 唯一。

表结构

执行 Select命令后,我们可以看到Employee 表。
PostgreSQL约束

Foreign key约束

这是一组列,其值取决于另一个表的主键收益。它用于使一列或一组列中的值必须显示在另一个表的同一列或列的组合中。
在PostgreSQL中,外键的值与的实际值平行pri玛丽键在另一个表中;这就是为什么它也称为参照完整性约束的原因。
例如
在下面的示例中,我们将创建一个名为 Employee1 的新表,其中包含与上一个表相似的四列。
CREATE TABLE Employee1(
Emp_Id int PRIMARY KEY NOT null,
Emp_Name TEXT NOT null, 
Emp_Address CHAR(30),
Emp_Age int NOT null
);
在此特定示例中,我们将再创建一个名为 cust 的表,其中包含三个列。并且,我们在此处创建外键作为 Cust_Id 列,该列引用 Employee1 表的 Emp_ID 字段
CREATE TABLE cust(
Emp_Id int PRIMARY KEY NOT null,
Cust CHAR(50) NOT null,
Cust_Id int references Employee1(Emp_Id)
);

PgAdmin4中的SQL查询

PostgreSQL约束

表结构

在这里,我们可以看到客户表的表结构,该表结构是对 Employee1 表的引用。
PostgreSQL约束

Exclusion约束

用于确保任何约束使用定义的运算符将两行链接到指定的列或语句上。在任何情况下,这些运算符评估之一都将返回null或false。
示例
在下面的示例中,我们将创建一个新表,名为雇员,其中包含五列。在这里,我们还将使用 exclude 约束。
CREATE TABLE Employee3(
Emp_Id int PRIMARY KEY  NOT null,
Emp_Name  TEXT,
Emp_Address CHAR(50),
Emp_Age INT,
Emp_SALARY REAL,
EXCLUDE USING gist (Emp_Name WITH =,Emp_Age WITH <>)
);
现在,对于排除约束,我们将使用使用要领(它是索引),并用于创建和实现。
注意: 如果我们使用排除约束,则必须运行create扩展
btree_gist 命令一次,在数据库中。然后,它将连接 btree_gist扩展,该扩展定义了基本标量数据类型的约束。
CREATE EXTENSION btree_gist;
现在,我们将在 Employee3 表中插入一些记录,并且还设置了相似的年龄。
前两个插入命令将成功执行。
INSERT INTO Employee3 VALUES(101, 'john','Newyork',22, 30000.00 );
INSERT INTO Employee3 VALUES(102, 'john','Florida',22, 30000.00 );
并将记录添加到 Employee3 表中,如下面的屏幕快照所示:
PostgreSQL约束
但是对于第三次插入命令,我们可能会遇到以下错误:
INSERT INTO Employee3 VALUES(103, 'john', 'Newyork', 32, 30000.00 );
ERROR: conflicting key value violates exclusion constraint "employee2_emp_name_emp_age_excl" DETAIL: Key (emp_name, emp_age)=(john, 32) conflicts with existing key (emp_name, emp_age)=(john, 22).
PostgreSQL约束

PgAdmin4中的SQL查询

PostgreSQL Constraints

Dropping Constraints

如果我们要删除约束,那么我们应该记住约束,因为我们更容易直接按其名称删除约束。否则,我们将需要识别系统生成的名称。
在 psql 中,可以使用以下命令来查找名称。
\d table name
删除约束的语法如下:
ALTER TABLE table_name DROP CONSTRAint some_name;

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4