MySQL触发器代码提示‘missing ;’错误,多次调整仍未解决求助
解决MySQL触发器创建时的"missing ;"错误
你的触发器代码存在两个关键问题导致报错:
CALLdb_5300.align_hmi_to_mes1()语句末尾缺少分号,这是触发语法错误的直接原因- 创建包含
BEGIN/END代码块的触发器时,默认语句分隔符;会让MySQL提前结束触发器定义,引发解析冲突
以下是修正后的完整代码:
CREATE TABLE `hmi_to_mes1` ( `ID` int NOT NULL, `Note` text CHARACTER SET utf8mb4 COLLATE utf8mb4_bin, `Created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `Updated` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; -- 临时修改语句分隔符为//,避免与触发器内的;冲突 DELIMITER // CREATE DEFINER=CURRENT_USER TRIGGER `db_5300`.`hmi_to_mes_AFTER_INSERT` AFTER INSERT ON `hmi_to_mes` FOR EACH ROW BEGIN CALL `db_5300`.align_hmi_to_mes1(); -- 补充缺失的分号 END // -- 用新分隔符结束触发器定义 -- 恢复默认语句分隔符; DELIMITER ;
核心修正点:
- CALL语句补充分号:存储过程调用属于独立SQL语句,必须以
;结尾,符合MySQL基础语法规范 - 临时修改分隔符:通过
DELIMITER //变更语句结束符,确保MySQL将BEGIN到END //之间的内容识别为完整的触发器定义,不会被内部的;提前截断,操作完成后恢复默认分隔符
内容的提问来源于stack exchange,提问作者manfrinmarco
相关产品推荐
相关产品推荐

