You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置交货日期大于订单日期的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 14:20:19