如何用触发器将moneyincome表数据同步至availablecash表(覆盖/累加)
嘿,这个需求用数据库触发器就能轻松搞定!我分两种处理方式给你写具体的实现代码,默认用MySQL语法(如果是其他数据库,比如PostgreSQL/SQL Server,语法稍作调整就行):
方式一:覆盖替换
availablecash的现有值 这个逻辑会把availablecash里的money直接替换成你插入到moneyincome的新值。根据你的表关联逻辑,分两种场景实现:
DELIMITER // CREATE TRIGGER sync_money_override AFTER INSERT ON moneyincome FOR EACH ROW BEGIN -- 场景1:availablecash只有单条记录(比如存全局总可用现金) UPDATE availablecash SET money = NEW.money; -- 场景2:按code关联更新(比如availablecash的code与插入的moneyincome的code一一对应),替换成下面的代码: -- UPDATE availablecash -- SET money = NEW.money -- WHERE code = NEW.code; END // DELIMITER ;
方式二:将新值累加到现有值上
这个逻辑会把新插入的money值加到availablecash已有的money字段里,实现累加效果:
DELIMITER // CREATE TRIGGER sync_money_add AFTER INSERT ON moneyincome FOR EACH ROW BEGIN -- 场景1:单条记录累加 UPDATE availablecash SET money = money + NEW.money; -- 场景2:按code关联累加,替换成下面的代码: -- UPDATE availablecash SET money = money + NEW.money -- WHERE code = NEW.code; END // DELIMITER ;
额外补充:处理availablecash无对应记录的情况
如果availablecash里可能没有对应code的记录,你可以用INSERT ... ON DUPLICATE KEY UPDATE实现“无则插入,有则更新”的逻辑,前提是availablecash的code字段是唯一键(主键或唯一约束):
累加版本
DELIMITER // CREATE TRIGGER sync_money_add_or_insert AFTER INSERT ON moneyincome FOR EACH ROW BEGIN INSERT INTO availablecash (code, money) VALUES (NEW.code, NEW.money) ON DUPLICATE KEY UPDATE money = money + NEW.money; END // DELIMITER ;
覆盖版本
DELIMITER // CREATE TRIGGER sync_money_override_or_insert AFTER INSERT ON moneyincome FOR EACH ROW BEGIN INSERT INTO availablecash (code, money) VALUES (NEW.code, NEW.money) ON DUPLICATE KEY UPDATE money = NEW.money; END // DELIMITER ;
内容的提问来源于stack exchange,提问作者Juan Perez
相关产品推荐
相关产品推荐

