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。