SQL NOT NULL 约束

摘要:本教程将介绍如何使用 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 值。

本教程是否有用?