PostgreSQL NOT NULL
PostgreSQL NOT NULL 约束用来限制列的值不能为空。
在 PostgreSQL 中,NOT NULL 是列上的约束,它用来约束列中的值不能为 NULL 值。
注意, NULL 不是空串,也不是 0,它表示什么都没有。您可以使用 IS NULL 操作符判断一个值是否是 NULL。
PostgreSQL NOT NULL 语法
要定义一个 NOT NULL 的列,请使用以下方法。
定义 NOT NULL 列
请使用以下语法定义一个 NOT NULL 列:
CREATE TABLE table_name (
...
column_name data_type NOT NULL ...,
...
);
添加 NOT NULL 约束
要向现有的列添加 NOT NULL 约束,请使用以下语法修改列的定义:
ALTER TABLE table_name
ALTER COLUMN column_name SET NOT NULL;
column_name 是要添加 NOT NULL 约束的列的名字。
删除 NOT NULL 约束
要删除列上的 NOT NULL 约束,请使用以下语法修改列的定义:
ALTER TABLE table_name
ALTER COLUMN column_name DROP NOT NULL;
column_name 是要从中删除 NOT NULL 约束的列的名字。
PostgreSQL NOT NULL 实例
让我们通过一个例子了解 NOT NULL 的作用。请按照以下步骤进行操作:
-
通过以下语句创建
user_hobby表:DROP TABLE IF EXISTS user_hobby; CREATE TABLE user_hobby ( hobby_id SERIAL PRIMARY KEY, user_id INTEGER NOT NULL, hobby VARCHAR(45) NOT NULL );这里,
user_id和hobby列中不接受NULL值。 -
插入几行数据
INSERT INTO user_hobby (user_id, hobby) VALUES (1, 'Football'), (1, 'Swimming');很显然能插入成功。
-
向
hobby列中插入NULL值:INSERT INTO user_hobby (user_id, hobby) VALUES (1, NULL);ERROR: null value in column "hobby" violates not-null constraint DETAIL: Failing row contains (3, 1, null).PostgreSQL 服务器会返回了上面的错误。因为
hobby列不能为空。
将现有列修改为不能为空
如果你想将现有的一个允许 NULL 值的列修改为不允许 NULL 值,请先将该列中的 NULL 值修改为非 NULL 值,否则可能遇到错误。
假设,我们有下面的一个表:
DROP TABLE IF EXISTS user_hobby;
CREATE TABLE user_hobby (
hobby_id SERIAL PRIMARY KEY,
user_id INTEGER NOT NULL,
hobby VARCHAR(45)
);
这里,hobby 列中是可以有 NULL 值的。
现在我们插入几行测试数据:
INSERT INTO user_hobby (user_id, hobby)
VALUES (1, 'Football'), (1, NULL);
现在我们看以下表中的数据:
SELECT * FROM user_hobby;
hobby_id | user_id | hobby
----------+---------+----------
1 | 1 | Football
2 | 1 |
(2 rows)运行如下语句为 hobby 列添加 NOT NULL 约束:
ALTER TABLE user_hobby
ALTER hobby SET NOT NULL;
ERROR: column "hobby" contains null valuesPostgreSQL 会返回了上面的错误。这是因为其中一行的 hobby 列中的值为 NULL。
我们应该首先将 hobby 列中 NULL 值改为非 NULL 值:
UPDATE user_hobby
SET hobby = 'NOTHING'
WHERE hobby IS NULL;
然后我们再为 hobby 列添加 NOT NULL 约束:
ALTER TABLE user_hobby
ALTER hobby SET NOT NULL;
现在已经成功的为 hobby 列添加了 NOT NULL 约束。
结论
在本文中,我们学习了在 PostgreSQL 中如何使用 NOT NULL 限制列的值不能为 NULL。