本教程将演示如何使用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值。
