PostgreSQLNot-NullConstraint-PostgreSQL教程|
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教程]PostgreSQL与SQLite-PostgreSQL教程|
- [PostgreSQL教程]MongoDB与PostgreSQL-PostgreSQL教程|
- [PostgreSQL教程]psqlcommands-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLDate&TimeFunction-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLFunctions-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL禁用触发器-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL左连接-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQLANDCondition-PostgreSQL教程|
- [PostgreSQL教程]PostgreSQL获取子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQL与Oracle-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQL与SQLServer-PostgreSQL教程|
- MongoDB与PostgreSQL-PostgreSQL教程|
- PostgreSQLEXCEPT-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- psqlcommands-PostgreSQL教程|
- PostgreSQLDate&TimeFunction-PostgreSQL教程|
- PostgreSQL删除触发器-PostgreSQL教程|
- PostgreSQLOrderby子句-PostgreSQL教程|
- PostgreSQL与SQLite-PostgreSQL教程|
- PostgreSQLINTERSECT-PostgreSQL教程|
- PostgreSQLAlias-PostgreSQL教程|
- PostgreSQLNot-NullConstraint-PostgreSQL教程|
- PostgreSQL与MariaDB-PostgreSQL教程|
- PostgreSQLUnion-PostgreSQL教程|
- PostgreSQLMulti-columnIndexes-PostgreSQL教程|
- PostgreSQL左连接-PostgreSQL教程|