摘要:本教程将介绍如何使用 SQL NOT NULL 约束来强制列存储非 NULL 值。
SQL NOT NULL 约束简介
NOT NULL 约束是一种列约束,该约束定义规则,该规则约束一列仅具有非 NULL 值。
这意味着当我们使用 INSERT 语句向表中 插入新行 时,我们必须为 NOT NULL 列指定值。
以下语句说明了 NOT NULL 约束语法。它强制 column_name
不接受任何 NULL 值。
CREATE TABLE table_name(
...
column_name data_type NOT NULL,
...
);
Code language: SQL (Structured Query Language) (sql)
从逻辑上来说,NOT NULL 约束等同于 CHECK 约束,因此上述语句等同于以下语句。
CREATE TABLE table_name (
...
column_name data_type,
...
CHECK (column_name IS NOT NULL)
);
Code language: SQL (Structured Query Language) (sql)
例如,以下语句创建了 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)
);
Code language: SQL (Structured Query Language) (sql)
大多数关系数据库管理系统都会默认自动为主键列添加 NOT NULL 约束,因此我们不必明确指定它。
以下 INSERT 语句违反了 NOT NULL 约束。
INSERT INTO training(employee_id,course_id)
VALUES(1,1);
Code language: SQL (Structured Query Language) (sql)
ALTER TABLE NOT NULL 语句
通常,我们为列定义 NOT NULL 约束,因为我们在 创建表 时。但是,有时我们会希望把当前接受 NULL 值的列约束更改为不允许接受 NULL 值。
为了进行更改,我们需要执行以下两个步骤
首先,使用 UPDATE 语句将所有当前的 NULL 值更新为非 NULL 值。
UPDATE table_name
SET column_name = 0
WHERE
column_name IS NULL;
Code language: SQL (Structured Query Language) (sql)
请注意,我们在 WHERE 子句 中使用 IS NULL 运算符来查找其 column_name
为 NULL 的行。
其次,使用 ALTER TABLE 语句为该列添加 NOT NULL 约束
ALTER TABLE table_name
MODIFY column_name data_type NOT NULL;
Code language: SQL (Structured Query Language) (sql)
假设 training
表的 taken_date
列为 NULL,并且我们想将其更改为 NOT NULL。
首先,我们将 taken_date 列中的所有 NULL 值更新为特定日期,例如当前日期。
UPDATE training
SET taken_date = CURRENT_DATE ()
WHERE
taken_date IS NULL;
Code language: SQL (Structured Query Language) (sql)
其次,我们将 take_date
列更改为 NOT NULL 约束。
ALTER TABLE training
MODIFY taken_date date NOT NULL;
Code language: SQL (Structured Query Language) (sql)
在本教程中,我们展示了如何使用 NOT NULL 约束来限制一列仅接受非 NULL 值。