如何在MySQL中创建多个触发器 实现插入前温度值自动除以10
MySQL gdc_1表温度字段自动缩放触发器实现方案
仅处理插入场景单触发器即可满足需求,若需要同时覆盖插入、更新两个业务场景,可创建2个触发器实现,具体步骤如下:
前置注意事项
请先确认
gdc_1表的top_die_temp、bottom_die_temp、side_die_temp三个温度字段为数值类型(INT/FLOAT/DECIMAL均可),若为字符串类型需在计算前做类型转换,避免隐式转换误差。
1. 插入前自动处理触发器
该触发器会在所有INSERT语句执行前触发,自动将新写入的温度值除以10:
DELIMITER // CREATE TRIGGER trg_gdc_1_before_insert BEFORE INSERT ON gdc_1 FOR EACH ROW BEGIN SET NEW.top_die_temp = NEW.top_die_temp / 10; SET NEW.bottom_die_temp = NEW.bottom_die_temp / 10; SET NEW.side_die_temp = NEW.side_die_temp / 10; END // DELIMITER ;
你提供的测试插入语句INSERT INTO gdc_1(date,time, top_die_temp, bottom_die_temp, side_die_temp) VALUES ('2021-10-18','23:18','339','356','456');执行后,表中实际存储的三个温度值为33.9、35.6、45.6,符合需求。
2. 更新前自动处理触发器
如果需要在更新温度字段时也自动做除以10的处理,可额外创建第二个触发器:
DELIMITER // CREATE TRIGGER trg_gdc_1_before_update BEFORE UPDATE ON gdc_1 FOR EACH ROW BEGIN -- 仅温度字段发生变更时才重新计算,不需要可删除IF判断 IF NEW.top_die_temp != OLD.top_die_temp THEN SET NEW.top_die_temp = NEW.top_die_temp / 10; END IF; IF NEW.bottom_die_temp != OLD.bottom_die_temp THEN SET NEW.bottom_die_temp = NEW.bottom_die_temp / 10; END IF; IF NEW.side_die_temp != OLD.side_die_temp THEN SET NEW.side_die_temp = NEW.side_die_temp / 10; END IF; END // DELIMITER ;
效果验证
执行测试插入语句后,运行以下查询即可验证结果:
SELECT * FROM gdc_1 WHERE `date` = '2021-10-18' AND `time` = '23:18';
内容的提问来源于stack exchange,提问作者Sahsha
相关产品推荐
相关产品推荐

