CHECK 檢查約束

CHECK 約束用來限制欄位可接受的值,確保資料符合指定的條件。

建立資料表時設定

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10,2) CHECK (price > 0),
    quantity INT CHECK (quantity >= 0)
);

也可以寫在資料表定義的最後:

CREATE TABLE products (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    price DECIMAL(10,2),
    CHECK (price > 0)
);

命名 CHECK 約束

CREATE TABLE products (
    id INT PRIMARY KEY,
    price DECIMAL(10,2),
    CONSTRAINT chk_price_positive CHECK (price > 0)
);

多條件檢查

可以使用 AND、OR 組合多個條件:

CREATE TABLE employees (
    id INT PRIMARY KEY,
    age INT,
    salary DECIMAL(10,2),
    CONSTRAINT chk_employee CHECK (age >= 18 AND age <= 65 AND salary > 0)
);

新增 CHECK 約束

ALTER TABLE products ADD CHECK (price > 0);

-- 或命名約束
ALTER TABLE products ADD CONSTRAINT chk_price_positive CHECK (price > 0);

移除 CHECK 約束

-- SQL Server / PostgreSQL
ALTER TABLE products DROP CONSTRAINT chk_price_positive;

-- MySQL 8.0.16+
ALTER TABLE products DROP CHECK chk_price_positive;
MySQL 8.0.16 之前的版本雖然可以定義 CHECK 約束,但不會實際執行檢查。如需在舊版 MySQL 實現類似功能,可以使用 Trigger