SQL Not Null约束

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

其次,使用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值。

        原文作者:SQL教程
        原文地址: https://www.yiibai.com/sql/sql-not-null-constraint.html
        本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
    点赞