本教學將演示如何使用SQL NOT NULL
約束來強制列儲存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
約束,所以插入資料時會出現錯誤。
通常,在建立表時為列定義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
值。