NOT NULL 非空值約束

NOT NULL 約束用來確保欄位不能儲存 NULL 值。預設情況下,欄位是允許 NULL 的。

建立資料表時設定

CREATE TABLE customers (
    id INT NOT NULL,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100),          -- 允許 NULL
    phone VARCHAR(20) NOT NULL
);

在這個範例中,idnamephone 是必填欄位,而 email 可以為空。

新增資料時的影響

設定 NOT NULL 後,新增資料時必須提供該欄位的值:

-- 成功
INSERT INTO customers (id, name, phone) VALUES (1, '王小明', '0912345678');

-- 失敗:name 不能為 NULL
INSERT INTO customers (id, name, phone) VALUES (2, NULL, '0923456789');

對現有資料表新增 NOT NULL

使用 ALTER TABLE 修改現有欄位:

-- MySQL
ALTER TABLE customers MODIFY email VARCHAR(100) NOT NULL;

-- SQL Server
ALTER TABLE customers ALTER COLUMN email VARCHAR(100) NOT NULL;

-- PostgreSQL
ALTER TABLE customers ALTER COLUMN email SET NOT NULL;
在新增 NOT NULL 約束之前,必須先確保該欄位沒有 NULL 值,否則會失敗。