本教程将演示如何使用SQL NOT NULL
约束来强制列存储NULL
值。
1. SQL NOT NULL约束简介
NOT NULL
约束是一个列约束,它定义将列限制为仅具有非NULL
值的规则。
这意味着当使用INSERT
语句向表中插入新行时,必须指定NOT NULL
列的值。以下语句是NOT NULL
约束语法。 它强制column_name
不能接受NULL
值。
CREATE TABLE table_name(
...
column_name data_type NOT NULL,
...
);
逻辑上,NOT NULL
约束等同于CHECK
约束,因此,上述语句等效于以下语句。
CREATE TABLE table_name (
...
column_name data_type,
...
CHECK (column_name IS NOT NULL)
);
例如,以下语句创建一个名称为training
表,表中有带一个NOT NULL
约束的taken_date
列。
CREATE TABLE training (
employee_id INT,
course_id INT,
taken_date DATE NOT NULL,
PRIMARY KEY (employee_id , course_id)
);
大多数关系数据库管理系统默认情况下会自动将NOT NULL
约束添加到主键列,因此不必明确指定它。
以下INSERT
语句违反了NOT NULL
约束。
INSERT INTO training(employee_id,course_id)
VALUES(1,1);
上面插入语句中,taken_date
列未指定值,因此默认使用NULL
值,但是taken_date
列指定了NOT NULL
约束,所以插入数据时会出现错误。
2. ALTER TABLE NOT NULL语句
通常,在创建表时为列定义NOT NULL
约束。 但是,有时希望更改列的约束以接受NULL
值。
要进行更改以接受NULL
值,可参考以下两个步骤:
首先,使用UPDATE
语句将所有当前NULL
值更新为非NULL
值。
UPDATE table_name
SET column_name = 0
WHERE
column_name IS NULL;
请注意,在WHERE
子句中使用IS NULL
运算符来查找column_name
为NULL
的行。
其次,使用ALTER TABLE
语句将NOT NULL
约束添加到列
ALTER TABLE table_name
MODIFY column_name data_type NOT NULL;
假设training
表的taken_date
列为NULL
,想将它更改为NOT NULL
。
首先,将taken_date
列中的所有NULL
值更新为特定日期,例如:当前日期。
UPDATE training
SET taken_date = CURRENT_DATE ()
WHERE
taken_date IS NULL;
其次,将take_date
列更改为NOT NULL
约束。
ALTER TABLE training
MODIFY taken_date date NOT NULL;
在本教程中,讲解了NOT NULL
约束的概念,并演示了如何使用NOT NULL
约束将列约束为仅接受非NULL
值。