PostgreSQL 非空约束

2025年3月17日 | 阅读 8 分钟

在本节中,我们将了解 PostgreSQL NOT NULL 约束 的工作原理,该约束用于确保列的值不为 null

PostgreSQL NOT NULL 约束的示例、如何声明 PostgreSQL NOT NULL 约束以及向现有列添加 NOT NULL 约束

在理解 PostgreSQL NOT NULL 约束的概念之前,我们将先学习 Null。

什么是 NULL?

NULL 用于表示未知或缺失的信息。根据数据库理论,它不等于空字符串或数字零。

例如,如果我们想在一个特定表中插入客户的手机号码,我们可以询问他的手机号码。但如果我们不知道客户是否有手机号码,我们可以在手机号码列中插入 NULL。

在这种情况下,NULL 表示在记录时手机号码是未知的。

NULL 非常重要,因为它不等于任何东西,甚至不等于它本身,正如我们在下面的表达式中可以看到的

上述语句将返回 NULL,因为两个未知值不相等是有意义的。

如果我们想检查值是否为 NULL,我们可以使用 IS NULL 布尔运算符。例如,如果手机号码列的值为 NULL,则以下语句返回 true。

注意

  • IS NOT NULL 运算符与 IS NULL 的输出相反。
  • 我们绝不应使用 (=) 等于运算符将值与 NULL 进行比较,因为它始终返回 NULL

什么是 PostgreSQL 非空约束?

PostgreSQL 中,not-null 约束 是一列,默认情况下它可以包含 Null 值。如果我们不希望某一列出现 NULL 值,我们需要在该列状态上定义这样的约束,并且 NULL 不再能被该特定列接受。

not null 约束始终作为列约束创建,它代表未知数据,但这并不意味着数据应该是 null

换句话说,我们可以说 PostgreSQL not-null 约束 用于确保列不能包含任何 null 值。

它是一个列约束,不能用作表约束,这意味着在创建not-null 约束时不能指定名称。我们可以将 not-null 约束直接放在列的数据类型之后。

PostgreSQL not-null 约束的语法

在下面的插图中,我们将使用 NOT NULL 约束来检查列是否可以接受 NULL 值。

注意:如果一列包含 NOT NULL 约束,或者我们尝试在列中插入或更新 NULL,则会产生错误。

PostgreSQL NOT NULL 约束示例

为了理解 PostgreSQL not null 约束 的工作原理,我们将看下面的示例,该示例描述了 NOT NULL 约束 在 PostgreSQL 中是如何使用的。

在下面的命令中,我们将使用 CREATE 命令创建一个名为 Bills 的新表,并使用 INSERT 命令 插入一些值。

要使用包含 Bill_id、Item_id、Quantity、Actual_price 列的 CREATE 命令,在 Javatpoint 数据库中创建Bills

输出

执行上述命令后,我们将收到以下消息:Bills 表已成功创建到 Jtp 数据库中。

PostgreSQL Not-Null Constraint

在上面的示例中,我们在 Item_idQuantity 列的数据类型之后使用了 NOT NULL 关键字来表示 NOT NULL 约束。

注意

  • 在 PostgreSQL 中,一列可以包含各种约束,例如 CHECK、FOREIGN KEY、UNIQUE KEY 和 NOT NULL,它们会紧挨着出现。
  • PostgreSQL 可以按任何顺序控制约束列表,因为约束的顺序并不重要。
  • 默认情况下,如果我们不定义 NOT NULL 或 NULL,它将接受 NULL 值

使用 ALTER TABLE 命令向现有列添加 PostgreSQL NOT NULL 约束

在 PostgreSQL 中,我们可以使用 ALTER TABLE 命令将 NOT NULL 约束添加到现有表的列中。

使用 ALTER TABLE 命令添加 not null 约束的语法

以下 ALTER TABLE 命令的插图用于将 NOT NULL 约束添加到现有表中。

如果我们想将多个 NOT NULL 约束添加到多个列,我们可以使用以下语法。

使用 ALTER TABLE 命令的 PostgreSQL Not Null 约束示例

为了理解 PostgreSQL NOT NULL 约束的工作原理,我们将看下面的示例,该示例描述了如何在 PostgreSQL 中通过 ALTER table 命令添加 NOT NULL 约束

在下面的示例中,我们将创建一个名为 Orders 的新表到 Jtp 数据库中。

在创建 Orders 表之前,如果 Jtp 数据库中存在类似的表,我们将使用 DROP TABLE 命令。

输出

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

PostgreSQL Not-Null Constraint

一旦之前创建的 Orders 表被删除,我们将创建一个新的 Orders 表,其中包含 ID、Specification、Raw_material_id、Quantity、Begin_id 和 End_id 等列。

输出

实施上述命令后,我们将收到以下消息:Orders 表已成功创建到 Jtp 数据库中。

PostgreSQL Not-Null Constraint

一旦 Orders 表成功创建,我们将使用 INSERT 命令向其中插入几条记录,如下面的命令所示。

输出

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

PostgreSQL Not-Null Constraint

之后,我们可以将非空约束添加到 Quantity 列,以确保 Quantity 列即使已经包含一些数据,也不会是 null

要将NOT NULL 约束添加到包含 NULL 值的列中,我们将遵循以下步骤。

步骤 1

首先,我们需要将NULL 更新为 NOT-NULL,如下面的语句所示。

输出

执行上述命令后,我们将收到下面的消息窗口,显示Orders表已成功更新。

PostgreSQL Not-Null Constraint

如上截图所示,Quantity 列中的值已更新为一。

步骤 2

现在,我们将使用 ALTER table 命令将NOT NULL 约束添加到 Quantity 列,如下面的语句所示。

输出

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

PostgreSQL Not-Null Constraint

步骤 3

之后,我们将使用以下命令更新 Raw_material_id、Begin_date 和 End_date 列的非空约束。

输出

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

PostgreSQL Not-Null Constraint

步骤 4

之后,我们将将非空约束添加到各种列,如下面的语句所示。

输出

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

PostgreSQL Not-Null Constraint

步骤 5

最后,我们将尝试将 Quantity 列中的值修改为 NULL,如下面的语句所示。

输出

执行上述命令后,PostgreSQL 发出了以下错误消息。

ERROR: null value in column "quantity" violates not-null constraint DETAIL: Failing row contains (1, Make for TCS, PQR, null, 2013-04-08, 2013-04-08)。

PostgreSQL Not-Null Constraint

NOT NULL 约束的不同情况

除了 PostgreSQL Not Null Constraint,我们还可以使用 CHECK 约束来强制列接受 NULL 值,而 NOT NULL 约束等同于下面的 CHECK 约束。

让我们看一个示例,以了解 PostgreSQL Not Null 约束的特殊情况。

假设我们希望 Buyer 表的 Login_name 或 Phone_number非空为空。在这种情况下,我们可以使用 CHECK 约束

为此,我们将首先使用 Create Table 命令创建 Buyer 表,如下面的命令所示。

输出

实施上述命令后,我们将收到以下消息窗口,显示Buyer表已成功创建到 jtp 数据库中。

PostgreSQL Not-Null Constraint

成功创建名为 Buyer 的新表后,我们将使用 INSERT 命令向其中输入一些值。

输出

实施上述命令后,我们将收到以下消息窗口,显示四个值已成功插入到 Buyer 表中。

PostgreSQL Not-Null Constraint

但是下面的命令将不起作用,因为它会中断 CHECK 约束

输出

执行上述命令后,PostgreSQL 将抛出以下错误。

ERROR: new row for relation "buyer" violates check constraint "login_name_phone_number_notnull" DETAIL: Failing row contains (5, null, null,).

PostgreSQL Not-Null Constraint

概述

PostgreSQL Not Null Constraint 部分,我们学习了以下主题。

  • 我们使用 NOT NULL 约束来确保列的值不为 null
  • 我们理解了 PostgreSQL NOT NULL 约束的不同情况。
  • 要检查一个值是否为 NULL,我们使用了 IS NULL 运算符,而 IS NOT NULL 则否定了 IS NULL 的输出。

下一个主题PostgreSQL 函数