如何在CREATE TABLE语句中为薪资字段添加条件CHECK约束
实现方案
你需要的第二个约束可以通过在CHECK规则中补充逻辑判断实现:当薪资超过125000时,必须满足title包含Manager字段,对应的逻辑条件为salary <= 125000 OR title LIKE '%Manager%'。
你可以选择将两个校验规则合并为一个CHECK约束,也可以分开写两个独立约束,效果完全一致,两种写法的示例如下:
合并约束写法
CREATE TABLE Employee ( name char(50), employeeId int, department char(30), title char(75), birthday date, salary int CHECK (salary >= 20000 AND (salary <= 125000 OR title LIKE '%Manager%')) );
分开约束写法(可读性更高,报错时更容易定位问题)
CREATE TABLE Employee ( name char(50), employeeId int, department char(30), title char(75), birthday date, salary int, CHECK (salary >= 20000), CHECK (salary <= 125000 OR title LIKE '%Manager%') );
注意事项
- 上述是标准SQL写法,可在PostgreSQL、SQL Server、Oracle以及MySQL 8.0.16及以上版本正常运行。如果你使用的是8.0.16以下的MySQL版本,这类版本会忽略CHECK约束定义,需要通过触发器实现相同的校验逻辑。
- 你当前使用
char(75)类型存储title字段,数据写入时会自动补空格到75位,可能会影响Manager关键字的匹配,建议将title字段改成varchar(75)类型,或者在匹配时加TRIM函数去除两端空格:TRIM(title) LIKE '%Manager%'。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

