PostgreSQL Not-Null Constraint PostgreSQL CHECK Constraint PostgreSQL Functions PostgreSQL Not-Null Constraint 在本节中,我们将了解PostgreSQL NOT NULL 约束的工作原理,该约束用于确保列的值不为空。 例子中的PostgreSQL的NOT NULL约束,如何声明PostgreSQL的NOT NULL约束,并添加NOT NULL约束到现有列。 在了解 PostgreSQL NOT NULL 约束的概念之前,我们先来了解一下 Null。 什么是空? 该NULL用于表示未知或遗漏信息。它与数据库理论中的空字符串或数字零不同。 例如,如果我们想将客户的手机号码插入到一个特定的表中,我们可以请求他/她的手机号码。但是如果我们不知道客户是否有手机号码,我们可以在手机号码列中插入NULL 。 在这种情况下,NULL 指定手机号码在记录时未知。 NULL 非常重要,因为它不等同于任何东西,甚至它本身,正如我们在下面的表达式中所观察到的: NULL = NULL 上面的语句将返回NULL,因为两个未识别的值不应该相等是有意义的。 如果我们想检查值是否为 NULL,我们可以使用IS NULL布尔运算符。例如,如果手机号码列的值为NULL ,则以下语句返回 true 。 Mobile_number IS NULL 笔记: 该IS NOT NULL操作相矛盾的输出IS NULL 我们永远不应该使用 (=)相等运算符将值与NULL进行比较,因为它总是返回NULL。 什么是 PostgreSQL Not-Null Constraint? 在PostgreSQL 中,not-null 约束是一个列,默认情况下可以保存Null值。如果我们不希望一列有 NULL 值,我们需要解释对这个列状态的这种约束,现在 NULL 对该特定列是不可接受的。 not null 约束总是作为列约束创建,它代表未知数据,但并不意味着数据应该为null。 换句话说,我们可以说PostgreSQL Not-Null Constraint用于确保列不能有任何空值。 它是一个不能用作表约束的列约束,这意味着不能指定名称来创建Not-Null Constraint。我们可以将Not-Null Constraint直接放在列的数据类型之后。 PostgreSQL Not-Null Constraint的语法 在下图中,我们将使用 NOT NULL 约束来检查列是否可以接受 NULL 值: CREATE TABLE table_name( ... column_name data_type NOT NULL, ... ); 注意:如果列包含 NOT NULL 约束,或者我们试图在列中插入或更新 NULL,它将在输出中发出错误。 PostgreSQL NOT NULL 约束示例 要了解PostgreSQL Not-Null Constraint的工作原理,我们将看到以下示例,该示例描述了PostgreSQL中如何使用NOT NULL 约束。 在下面的命令中,我们将使用CREATE命令的帮助创建一个新表作为Bills\,并使用INSERT命令插入一些值。 要将账单\创建到Javatpoint 数据库中,我们将使用包含各种列(例如Bill_id、Item_id、Quantity、Actual_price列)的CREATE命令。 CREATE TABLE Bills( Bill_id SERIAL PRIMARY KEY, Item_id INT NOT NULL, Quantity NUMERIC NOT NULL CHECK(Quantity > 0), Actual_price NUMERIC CHECK(Actual_price > 0) ); 输出 执行上述命令时,我们将收到以下消息:Bills\表已成功创建到Jtp数据库中。 在上面的示例中,我们在Item_id和Quantity列的数据类型之后使用了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 Constraint的语法 下图ALTER TABLE命令用于将 NOT NULL 约束添加到现有表中: ALTER TABLE table_name ALTER COLUMN column_name SET NOT NULL; 或者 如果我们想向各个列添加几个 NOT NULL 约束,我们可以使用以下语法: ALTER TABLE table_name ALTER COLUMN column_name_1 SET NOT NULL, ALTER COLUMN column_name_2 SET NOT NULL, ...; 使用 ALTER TABLE 命令的 PostgreSQL Not Null 约束示例 要了解PostgreSQL NOT NULL 约束的工作原理,我们将看到以下示例,该示例描述了如何通过PostgreSQL 中的ALTER table命令添加NOT NULL 约束。 在下面的示例中,我们将在Jtp数据库中创建一个名为Orders\的新表。 在创建Orders表之前,如果Jtp数据库中存在类似的表,我们将使用DROP TABLE命令。 DROP TABLE IF EXISTS Orders; 输出 执行上述命令后,我们会得到如下窗口信息,显示Orders\表已经删除成功。 删除先前创建的Orders\表后,我们将创建一个新的Orders\表,其中包含各种列,例如ID、Specification、Raw_material_id、Quantity、Begin_id 和 End_id 列。 CREATE TABLE Orders ( ID SERIAL PRIMARY KEY, Specification VARCHAR (50) NOT NULL, Raw_material_id VARCHAR (15), Quantity NUMERIC, Begin_date DATE, End_date DATE ); 输出 执行上述命令后,我们会得到如下信息:Orders\表已成功创建到Jtp数据库中。 一旦订单\表创建成功,我们将在INSERT命令的帮助下向其中插入几条记录,如以下命令所示: INSERT INTO Orders (Specification) VALUES('Make for TCS'); 输出 在执行上述命令时,我们将得到以下消息窗口,其中显示一个值已成功插入到Orders\表中。 之后,我们可以在Quantity列中添加Not-Null Constraint,以确保Quantity列不为空,尽管该列已经包含一些数据。 要将NOT NULL 约束添加到包含 NULL 值的列中,我们将按照以下步骤操作。 步骤1 首先,我们需要将NULL更新为 NOT-NULL,如以下语句所示: UPDATE Orders SET Quantity = 1; 输出 执行上述命令后,我们将得到如下消息窗口,显示订单\表已成功更新。 正如我们在上面的屏幕截图中看到的,Quantity列中的值更新为 1。 第2步 现在,我们将使用 ALTER table 命令将NOT NULL 约束添加到Quantity列,如下面的语句所示: ALTER TABLE Orders ALTER COLUMN Quantity SET NOT NULL; 输出 在执行上述命令时,我们将得到以下消息窗口,表明Orders\表已成功修改。 Step3 之后,我们将借助以下命令更新Raw_material_id、Begin_date 和 End_date列的Not-Null Constraint: UPDATE Orders SET Raw_material_id = 'PQR', Begin_date = '2013-04-08', End_date = '2013-04-08'; 输出 执行上述命令后,我们将看到以下消息窗口,显示订单\表已成功更新: 第四步 之后,我们将向各个列添加Not-Null 约束,如下面的语句所示: ALTER TABLE Orders ALTER COLUMN Raw_material_id SET NOT NULL, ALTER COLUMN Begin_date SET NOT NULL, ALTER COLUMN End_date SET NOT NULL; 输出 执行上述命令时,我们将检索以下消息窗口,该窗口显示特定表已成功更改。 第五步 最后,我们将尝试将Quantity列中的值修改为NUL L,因为我们可以观察到以下语句: UPDATE Orders SET Quantity = NULL; 输出 执行上述命令后,PostgreSQL 发出以下错误消息: 错误:“数量”列中的空值违反了Not-Null Constraint详细信息:失败的行包含(1,为 TCS 制作,PQR,空,2013-04-08,2013-04-08)。 NOT NULL 约束的不同情况 除了PostgreSQL Not Null Constraint 之外,我们还可以使用CHECK 约束来强制接受接受 NULL 值的列,NOT NULL 约束等于下面的 CHECK 约束: CHECK(column IS NOT NULL) 让我们看一个示例示例,以了解 PostgreSQL Not Null Constraint 的特殊情况。 假设我们希望买家\表的Login_name 或 Phone_number列不为 Null或为空。在这种情况下,我们可以使用CHECK 约束。 为此,首先,我们将借助Create Table 命令的帮助创建买方\表,如以下命令所示: CREATE TABLE Buyer ( ID serial PRIMARY KEY, Login_name VARCHAR (40), Password VARCHAR (40), Phone_number VARCHAR (40), CONSTRAINT Login_name_Phone_number_notnull CHECK ( NOT ( (Login_name IS NULL OR Login_name = '' ) AND ( Phone_number IS NULL OR Phone_number = '' ) ) ) ); 输出 执行完上面的命令后,我们会得到下面的消息窗口,显示Buyer\表已经成功创建到jtp数据库中。 成功创建作为买方\的新表后,我们将在INSERT命令的帮助下向其中输入一些值。 INSERT INTO Buyer (Login_name, Phone_number) VALUES ('Login1', NULL), (NULL, '9876543210'), ('Login2,'0123456789'), ('Login3', ''); 输出 执行上述命令后,我们会得到如下消息窗口,显示四个值已成功插入到Buyer\表中。 但是下面的命令将不起作用,因为它会中断CHECK 约束: INSERT INTO Buyer (Login_name, Phone_number) VALUES (NULL, ''), (NULL, NULL), ('', ''), ('', NULL); 输出 执行上述命令后,PostgreSQL 将引发以下错误: 错误:关系“买家”的新行违反了检查约束“login_name_phone_number_notnull”详细信息:失败的行包含(5,空,空,)。 概述 在PostgreSQL Not-Null Constraint部分,我们学习了以下主题: 我们使用了NOT NULL 约束来确保列的值不为空。 我们已经了解了 PostgreSQL NOT NULL 约束的不同情况。 要检查值为NULL与否,我们已经使用了IS NULL操作,其中IS NOT NULL否认的输出IS NULL。 PostgreSQL CHECK Constraint PostgreSQL Functions