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

MySQL BEFORE UPDATE触发器按id+day条件计算amount列总和实现咨询

MySQL BEFORE UPDATE触发器实现方案

参考表结构

iddayvariableamount
1MondayTotalnull
1Mondaynull1
1Mondaynull2
1Mondaynull3
1TuesdayTotalnull
1Tuesdaynull1
1Tuesdaynull2
1Tuesdaynull3
2MondayTotalnull
2Mondaynull1
2Mondaynull2
2Mondaynull3
2TuesdayTotalnull
2Tuesdaynull1
2Tuesdaynull2
2Tuesdaynull3

核心实现逻辑

  • 仅捕获amount字段发生变更的更新操作,减少无意义计算
  • 取当前被更新行的id和day作为唯一分组条件,仅计算该分组的合计值,不会影响其他id或其他日期的合计结果
  • 跳过variable='Total'行本身的更新逻辑,避免循环触发
  • 计算完成后仅更新同分组下variable='Total'行的amount值

触发器代码

DELIMITER //
CREATE TRIGGER update_total_amount BEFORE UPDATE ON your_table_name
FOR EACH ROW
BEGIN
    -- 仅amount字段变更时触发计算
    IF OLD.amount <> NEW.amount THEN
        -- 跳过Total行的更新,避免循环触发
        IF OLD.variable <> 'Total' THEN
            -- 计算当前id+day分组下所有非Total行的amount总和
            UPDATE your_table_name 
            SET amount = (
                SELECT SUM(amount) 
                FROM (SELECT * FROM your_table_name) AS temp
                WHERE id = OLD.id 
                  AND day = OLD.day 
                  AND variable IS NULL
            )
            WHERE id = OLD.id 
              AND day = OLD.day 
              AND variable = 'Total';
        END IF;
    END IF;
END //
DELIMITER ;

注意将代码中的your_table_name替换为实际使用的表名

内容的提问来源于stack exchange,提问作者user16627043

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:15:00