MariaDB创建跨表取值触发器调用sys_exec报错1054问题求解
问题原因
你遇到的1054报错本质是SQL执行过程中找不到指定字段,结合你的场景,大概率是以下两种情况:
- 触发器创建时写错了查询字段名,你代码中写的是
anotherfield,但报错提示的是anothervalue,明显存在名称不匹配的问题 - 之前创建过同名触发器未删除,实际运行的是包含错误字段名的旧触发器逻辑
解决步骤
- 第一步:先删除已存在的同名触发器,避免旧逻辑残留,执行语句:
DROP TRIGGER IF EXISTS table1_after_update; - 第二步:核对table2的实际字段名,执行以下语句查看表结构,确认要查询的字段准确名称:
DESC table2; - 第三步:使用修正后的触发器创建语句,同时增加空值、多行返回的兼容逻辑,避免后续出现其他异常:
DELIMITER $$ CREATE TRIGGER `table1_after_update` AFTER UPDATE ON `table1` FOR EACH ROW BEGIN DECLARE myvar INT(10) UNSIGNED DEFAULT 0; -- 匹配到对应记录再赋值,避免空值 IF EXISTS (SELECT 1 FROM table2 WHERE id = NEW.id) THEN SELECT anotherfield INTO myvar FROM table2 WHERE id = NEW.id LIMIT 1; END IF; -- 空值兜底,避免CONCAT结果为NULL导致sys_exec调用失败 SET @exec_var = sys_exec(CONCAT('test.sh ', NEW.id, ' ', IFNULL(myvar, 0))); END$$ DELIMITER ;
内容的提问来源于stack exchange,提问作者Tubthumper
相关产品推荐
相关产品推荐

