摘要:本教學將示範如何使用 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
表格,其中 taken_date
欄位具有 NOT NULL 約束。
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 值。