如何设置交货日期大于订单日期的CHECK约束?执行语句报错求助
解决CHECK约束添加失败的问题
你的SQL语句错误在于用modify子句来添加CHECK约束——modify仅用于修改字段的基础属性(比如数据类型、是否为空、默认值),不能用来添加表级的CHECK约束。正确的做法是用ADD CONSTRAINT语句来添加约束:
正确的SQL语句
ALTER TABLE sales_order ADD CONSTRAINT chk_delivery_after_order CHECK (dely_date > order_Date);
补充说明
- 约束名
chk_delivery_after_order可以自定义,只要符合数据库的命名规则即可 - 如果是MySQL 8.0之前的版本,官方会忽略CHECK约束的定义,此时需要用触发器来实现相同逻辑:
-- 创建插入前的检查触发器 DELIMITER // CREATE TRIGGER trg_check_delivery_insert BEFORE INSERT ON sales_order FOR EACH ROW BEGIN IF NEW.dely_date <= NEW.order_Date THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '交货日期必须晚于订单日期'; END IF; END // DELIMITER ; -- 创建更新前的检查触发器 DELIMITER // CREATE TRIGGER trg_check_delivery_update BEFORE UPDATE ON sales_order FOR EACH ROW BEGIN IF NEW.dely_date <= NEW.order_Date THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '交货日期必须晚于订单日期'; END IF; END // DELIMITER ; - 对于PostgreSQL、SQL Server、Oracle等数据库,直接使用前面的
ADD CONSTRAINT语句即可生效。
内容的提问来源于stack exchange,提问作者Deepak chauhan
相关产品推荐
相关产品推荐

