MySQL触发器中使用SELECT...INTO语句报错,请求技术支持
解决MySQL触发器中SELECT...INTO的语法错误问题
我帮你定位到问题啦,咱们来快速解决这个报错:
错误原因
你代码里用到的system是MySQL的保留关键字,直接把它作为列名使用时,MySQL的语法解析器会混淆它的用途,从而抛出你看到的“select在当前服务器版本的此位置无效,期望: '('”错误。
修正后的完整代码
只需要给system列名加上反引号(`),让MySQL明确这是一个列名而非关键字即可,修正后的代码如下:
delimiter | CREATE TRIGGER after_temp_ticket_insert AFTER INSERT ON temp_tickets FOR EACH ROW begin declare ss varchar(5); select `system` into ss from support_system where team=new.assigned_team; INSERT INTO tickets(ticket_id,ticket_type,summary,assigned_team,assigned_to,created_by,created_date,priority,status,resolution,resolved_date,support_system,category_tier1,category_tier2) VALUES (new.ticket_id,new.ticket_type,new.summary,new.assigned_team,new.assigned_to,new.created_by,new.created_date,new.priority,new.status,new.resolution,new.resolved_date,ss,NULL,NULL); end | delimiter ;
额外注意事项
还要确保support_system表中,针对每个new.assigned_team的值,查询只会返回一行数据——因为SELECT...INTO要求结果必须是单行,否则会触发“返回多行”的报错。如果你的业务场景可能出现多行匹配的情况,可以加上LIMIT 1来限制结果行数:
select `system` into ss from support_system where team=new.assigned_team LIMIT 1;
内容的提问来源于stack exchange,提问作者Dev Anand
相关产品推荐
相关产品推荐

