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