MALOUDA-PSA 2025-03-09 20:18 采纳率: 85.6%
浏览 4

mysql触发器的问题


DELIMITER $$

CREATE TRIGGER update_fxj_before_update
before UPDATE ON fxj
FOR EACH ROW
BEGIN
    -- 仅当 stknew 发生变化时执行
    IF NEW.stknew <> OLD.stknew OR (NEW.stknew IS NULL AND OLD.stknew IS NOT NULL) OR (NEW.stknew IS NOT NULL AND OLD.stknew IS NULL) THEN
        -- 更新 c2exp12 的逻辑
        IF NEW.expma12 = 0 THEN
            SET NEW.c2exp12 = 100;
        ELSE
            SET NEW.c2exp12 = (NEW.stknew - NEW.expma12) / NEW.expma12 * 100;
        END IF;

        -- 更新 c2exp50 的逻辑
        IF NEW.expma50 = 0 THEN
            SET NEW.c2exp50 = 100;
        ELSE
            SET NEW.c2exp50 = (NEW.stknew - NEW.expma50) / NEW.expma50 * 100;
        END IF;
    END IF;
END$$

DELIMITER ;

运行报错:
Updating of NEW row is not allowed in after trigger

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2025-03-09 20:19
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    mysql 触发器的问题

    你遇到了 mysql 触发器的问题,具体来说是关于 update_fxj_before_update 触发器的定义。

    问题的关键是,触发器的定义中出现了 - 字符,这可能会导致语法错误。

    解决方案是,检查触发器的定义语句,确保没有任何语法错误。可能需要检查 BEGINEND 语句之间的代码是否正确。

    如果你想分享更多的代码信息,我可以帮助你更好地 debug。

    核心代码:

    DELIMITER $$
    
    CREATE TRIGGER update_fxj_before_update
    before UPDATE ON fxj
    FOR EACH ROW
    BEGIN
        -- 你的代码逻辑
    END$$
    DELIMITER ;
    
    评论

报告相同问题?

问题事件

  • 创建了问题 3月9日