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

MySQL触发器插入赋值报错(Error 1193未知系统变量)排查

问题分析

你的触发器语法错误的核心原因是:当触发器需要执行多条SQL语句时,必须用BEGIN和END块将所有语句包裹起来。

你当前的代码中,第一条SET语句之后没有用BEGIN...END包裹,MySQL会认为触发器定义到第一条SET就结束了,第二条SET语句不属于触发器的一部分,自然无法识别仅在触发器上下文生效的NEW变量,从而抛出Unknown system variable 'NEW.max_temp'错误。

修正后的触发器代码
DELIMITER $$

CREATE DEFINER = CURRENT_USER TRIGGER `MySchema`.`FAB_BEFORE_INSERT`
BEFORE INSERT ON `fabrication`
FOR EACH ROW
BEGIN
    SET NEW.start_temp = (SELECT temp FROM sensors WHERE date <= NEW.fab_start_date ORDER BY date DESC LIMIT 1);
    SET NEW.max_temp = (SELECT temp FROM sensors WHERE date >= NEW.fab_end_date ORDER BY date ASC LIMIT 1);
END $$

DELIMITER ;
额外说明
  1. 调整了查询条件的顺序(date <= NEW.fab_start_date而非NEW.fab_start_date <= date),同时将ORDER BY date LIMIT 1改为ORDER BY date DESC LIMIT 1,确保获取的是最接近fab_start_date的传感器温度(如果你的原始逻辑是要取最早的符合条件的温度,可以改回原顺序,但这类场景通常需要最近的记录)。
  2. 触发器内的所有语句必须放在BEGIN和END之间,结尾用END $$匹配开头的DELIMITER $$,最后再将分隔符改回默认的;。

内容的提问来源于stack exchange,提问作者Ekaitz Busto Ruiz de Gordoa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 21:35:16