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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:36:03