PostgreSQL – 非空约束
顾名思义,PostgreSQL Not-Null 约束用于确保相应列中的任何值都不为空。在数据库世界中,NULL 是未知或缺失的信息。 NULL 值与空字符串或数字零分开。例如,您可以向某人询问电子邮件地址,如果您不知道,您可以使用 NULL 值将其插入到电子邮件列中。这表明插入时的数据是未知的。如果此人没有电子邮件地址,则可以将其更新为空字符串。
NULL 值非常特殊。例如,NULL 不等于任何其他 NULL。要检查值是否为 NULL,可以使用布尔运算符IS NULL
或IS NOT NULL
。表达式 NULL = NULL 返回 NULL。
PostgreSQL 提供了非空约束来实现列不能接受 NULL 值的条件。这意味着无论何时插入或更新数据,都必须指定一个不为空的值。
Syntax: variable_name Data-type NOT NULL;
现在让我们看一个例子来更好地理解 NOT NULL 的概念。
例子:
首先,我们将创建一个带有 NOT NULL 约束的表invoice
,如下所示:
CREATE TABLE invoice(
id serial PRIMARY KEY,
product_id int NOT NULL,
qty numeric NOT NULL CHECK(qty > 0),
net_price numeric CHECK(net_price > 0)
);
在这个阶段,我们将首先插入满足上述约束的数据,如下所示:
INSERT INTO invoice (product_id, qty, net_price)
VALUES
('1', '5', 255);
现在我们将使用以下命令检查数据是否已成功插入:
SELECT * FROM invoice;
这将导致以下输出:
现在我们将尝试在发票表中插入一个 NULL 值,如下所示:
INSERT INTO invoice (product_id, qty, net_price)
VALUES
('1', NULL, 255);
输出:
ERROR: null value in column "qty" violates not-null constraint
DETAIL: Failing row contains (2, 1, null, 255).
我们可以观察到 NOT NULL 约束的行为符合预期。