PostgreSQL CHECK 约束

17 Mar 2025 | 6 分钟阅读

在本节中,我们将了解PostgreSQL 检查约束的工作原理,该约束用于确保表中一列或一个字段中的所有值都满足特定情况。

PostgreSQL 检查约束的示例, 以及如何为新表和现有表创建检查约束。

什么是 PostgreSQL CHECK 约束?

PostgreSQL中,检查约束可以通过单独的名称来定义。 它用于控制正在插入的列的值。

它允许我们验证要存储到记录中的条件。 如果该语句为假,则数据会破坏约束,该约束不会保存在表中。

换句话说,我们可以说PostgreSQL CHECK 约束用于确保表中一列或一个字段中的所有值都满足某些条件。

例如, 检查约束必须与布尔表达式匹配才能在将值插入或更新到该列之前计算这些值。

如果这些值保留了检查约束,PostgreSQL 将更新或插入这些值到列中。 否则,PostgreSQL 将放弃修改并引发约束违规错误。

使用创建表语句创建 CHECK 约束的语法

以下示例用于展示我们如何使用CREATE TABLE 命令创建CHECK 约束

参数说明

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

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

PostgreSQL CHECK 约束的示例

为了了解PostgreSQ CHECK 约束的工作原理, 我们将看下面的示例。

当使用 CREATE TABLE 命令指定表的结构时,通常可以使用CHECK 约束。

在下面的示例中,我们创建一个名为Worker的新表,其中包含多个列,例如Worker_ID、Worker_name、DOB、Joining_date 和 Salary

但是,在创建Worker表之前,我们将使用DROP TABLE 命令来检查 Jtp 数据库中是否已经存在类似的表。

输出

执行上述命令后,我们将收到以下窗口消息:Worker 表不存在。

Check Constraint

现在,我们将使用 CREATE 命令创建Worker表,如下所示

输出

执行上述命令后,我们将收到下面的消息窗口,显示Worker 表已成功创建到 jtp 数据库中。

Check Constraint

在上面的Worker表中,我们使用了以下三个 CHECK 约束

检查约束描述
第一个约束Worker 的出生日期 (DOB) 必须大于 1900 年 1 月 1 日。如果我们尝试在 1900 年 1 月 1 日之前插入出生日期,我们将收到一条错误消息。
第二个约束joined_date 必须大于出生日期 (DOB)。 并且此特定检查将阻止修改有关其语义含义的错误日期。
第三个约束薪水必须大于零。

成功创建Worker后,我们将借助 INSERT 命令输入一些值。

输出

执行上述命令后,PostgreSQL 出现了以下错误,因为我们在Salary列中插入了负薪水值 (-300000)

错误:关系“worker”的新行违反了检查约束“worker_salary_check”详细信息:失败的行包含 (2, Mike Ross, 1985-10-01, 2018-11-23, -300000)。

Check Constraint

并且,由于Salary 列上的CHECK 约束仅接受正值,因此插入命令失败。

默认情况下,PostgreSQL 借助以下模式为CHECK 约束提供一个名称

让我们看一个示例,其中Salary 列上的约束具有以下约束名称

PostgreSQL CHECK 约束中的单独名称

如果我们希望为 CHECK 约束分配一个单独的名称,我们可以在CONSTRAINT 表达式之后定义它,正如我们在下图中看到的那样

让我们看一个示例来了解我们如何使用 PostgreSQL 检查约束中的单独名称

为此,我们将使用 CREATE 命令创建一个新表,名为Orders,如下所示

输出

执行上述命令后,我们将收到以下窗口消息,显示 Orders 表已成功创建。

Check Constraint

如果我们想查看约束数据字典,我们可以按照以下步骤操作

步骤 1

打开SQL shell (psql),其中显示了必要的详细信息。 之后,我们将使用我们在 PostgreSQL 安装过程中创建的密码登录到 Postgres 数据库服务器。

提供密码后,我们已连接到Postgres 服务器, 如图所示

Check Constraint

步骤 2

现在,我们将借助下面的命令连接到特定的数据库服务器jtp,我们之前创建了它


Check Constraint

步骤 3

之后,我们将执行以下语法以列出特定表的所有约束(主键、检查、唯一)

最后,我们使用上述命令查看用于 Orders 表的约束

输出

在执行上述命令后,我们将获得以下结果

Check Constraint

注意:在上面的 Orders 表中,Article_price 列不能包含任何小于或等于零 (0) 的值。

在这里,一个约束名称已被包括,因此关键字 CONSTRAINT 后面跟着命名的约束 positive_Article_price 后面跟着表达式。

使用 ALTER TABLE 命令为现有表定义 PostgreSQL CHECK 约束

在 PostgreSQL 中,我们可以使用ALTER TABLE 命令添加现有表的 PostgreSQL 检查约束。

假设我们在数据库中有一个名为Amount_list的现有表。

输出

实现上述命令后,我们将收到以下消息窗口,显示 Amount_list 表已成功创建。

Check Constraint

要将CHECK 约束添加到 Amount_list 表中,我们可以使用 ALTER TABLE 命令,其中Amount 和 Discount 大于零,并且discount 小于 amount。

注意:我们也可以使用布尔表达式,其中包含 AND 运算符。

输出

实现上述命令后,我们将收到以下消息窗口,显示 Amount_list 表已成功创建。

Check Constraint

并且,Valid_to列的值必须等于或大于 Valid_from 列的值, 如下面的命令所示

输出

在执行上述命令后,我们将检索以下消息窗口,显示指定的表已成功修改。

Check Constraint

注意

  • 如果我们放置额外的逻辑来限制值,PostgreSQL 检查约束将非常有利。
  • 并且我们还可以确保数据在检查约束的帮助下正确有效地进入数据库。

概述

PostgreSQL 检查约束部分,我们学习了以下主题

  • 我们已经了解到,PostgreSQL CHECK 约束用于根据布尔表达式检查列的值。
  • 我们使用 CREATE TABLE 命令为特定表创建了检查约束
  • 我们也可以使用 ALTER TABLE 修改 PostgreSQL 检查约束
  • 我们使用 ALTER TABLE 命令将CHECK 约束添加到现有表。
  • 并且我们还了解了使用具有单独名称的 PostgreSQL 检查约束的概念。