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 ;
额外说明
- 调整了查询条件的顺序(
date <= NEW.fab_start_date而非NEW.fab_start_date <= date),同时将ORDER BY date LIMIT 1改为ORDER BY date DESC LIMIT 1,确保获取的是最接近fab_start_date的传感器温度(如果你的原始逻辑是要取最早的符合条件的温度,可以改回原顺序,但这类场景通常需要最近的记录)。 - 触发器内的所有语句必须放在
BEGIN和END之间,结尾用END $$匹配开头的DELIMITER $$,最后再将分隔符改回默认的;。
内容的提问来源于stack exchange,提问作者Ekaitz Busto Ruiz de Gordoa
相关产品推荐
相关产品推荐

