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值。