約束定義
-- 1. 僅允許 8 的倍數(含 0)
CREATE TABLE demo (
qty INT CHECK (qty % 8 = 0)
);
-- 2. 5 位整數 + 2 位小數(共 7 位精度)
CREATE TABLE demo (
amount NUMERIC(7, 2) -- 精度 7,標度 2 → 整數部分最多 5 位
);
說明
- `CHECK (qty % 8 = 0)` 插入/更新時自動驗證,不滿足拋錯誤。
- `NUMERIC(p,s)` / `DECIMAL(p,s)`:`p` 總位數(精度),`s` 小數位數(標度)。整數位 = `p-s`。
`NUMERIC(7,2)` 範圍:`-99999.99` ~ `99999.99`。
- MySQL 中 `INT` 無 `CHECK` 強制(8.0.16+ 支持),舊版本需觸發器。
- Oracle/PostgreSQL/SQL Server 完整支持 `CHECK`。
參考
SQL CHECK 約束詳細用法