首页/数据/SQL 速查/CHECK 约束
变更与事务52 条

CHECK 约束

用表达式限制列值范围:MySQL 8.0.16 起真正强制执行,PostgreSQL 长期支持;违反时写入直接报错。

SQL 速查数据更新于 2026-10-12

示例

示例
-- 金额必须为正
ALTER TABLE orders
  ADD CONSTRAINT chk_total_positive CHECK (total > 0);

-- 多条件组合
ALTER TABLE orders
  ADD CONSTRAINT chk_status_valid
  CHECK (status IN ('new', 'paid', 'shipped', 'done'));

-- 删除约束
ALTER TABLE orders DROP CONSTRAINT chk_total_positive;   -- MySQL 8.0.19+ 支持 DROP CONSTRAINT
ALTER TABLE orders DROP CONSTRAINT chk_status_valid;     -- PostgreSQL
强制执行MySQL 8.0.16 起生效;更早版本解析但忽略
NULLCHECK (col > 0) 对 NULL 为未知,不拦截 NULL
命名显式命名便于后续定位与删除

易错点

  • 在老版本 MySQL 上依赖 CHECK:8.0.16 之前不强制执行,校验要放到应用层
  • 忽略 NULL 语义:CHECK (total > 0) 不会拒绝 NULL,需要配合 NOT NULL

数据来源与参考

  • MySQL 8.0 Reference Manual · CHECK Constraints
  • PostgreSQL Documentation · Constraints
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌