执行MySQL触发器代码时提示DELIMITER附近syntax error语法错误
MySQL触发器DELIMITER语法错误排查
报错原因
DELIMITER 是MySQL命令行客户端独有的特殊指令,不属于标准SQL语法范畴,仅在MySQL原生命令行交互场景下生效。如果在图形化数据库管理工具(Navicat、DBeaver、PHPMyAdmin等)、业务代码的数据库连接驱动(JDBC、pymysql等)中直接执行包含DELIMITER的SQL代码,就会触发该语法错误。
少数情况下在MySQL命令行执行报错,是因为DELIMITER和自定义分隔符//之间没有保留空格,不符合写法要求。
解决办法
场景1:图形化工具/代码中执行
直接删除所有DELIMITER相关语句,调整当前执行环境的语句结束符配置为//,再执行以下代码:
DROP TRIGGER IF EXISTS after_stockmgmt_stock_update// CREATE TRIGGER after_stockmgmt_stock_update AFTER UPDATE ON stockmgmgt_stock FOR EACH ROW BEGIN IF new.issue_quantity = 0 THEN INSERT INTO stockmgmgt_stockhistory( id, last_updated, category_id, item_name, quantity, receive_quantity, receive_by) VALUES( new.id, new.last_updated, new.category_id, new.item_name, new.quantity, new.receive_quantity, new.receive_by); ELSEIF new.receive_quantity = 0 THEN INSERT INTO stockmgmgt_stockhistory( id, last_updated, category_id, item_name, issue_quantity, issue_to, issue_by, quantity) VALUES( new.id, new.last_updated, new.category_id, new.item_name, new.issue_quantity, new.issue_to, new.issue_by, new.quantity); END IF; END//
执行完成后再将语句结束符改回默认的;即可。
如果是在业务代码中执行,拆分语句分步执行即可:先单独执行DROP TRIGGER IF EXISTS after_stockmgmt_stock_update;,再单独执行完整的CREATE TRIGGER语句,无需设置分隔符。
场景2:MySQL原生命令行执行
确认DELIMITER和//之间保留空格,直接复制以下代码执行即可:
DELIMITER // DROP TRIGGER IF EXISTS after_stockmgmt_stock_update// CREATE TRIGGER after_stockmgmt_stock_update AFTER UPDATE ON stockmgmgt_stock FOR EACH ROW BEGIN IF new.issue_quantity = 0 THEN INSERT INTO stockmgmgt_stockhistory( id, last_updated, category_id, item_name, quantity, receive_quantity, receive_by) VALUES( new.id, new.last_updated, new.category_id, new.item_name, new.quantity, new.receive_quantity, new.receive_by); ELSEIF new.receive_quantity = 0 THEN INSERT INTO stockmgmgt_stockhistory( id, last_updated, category_id, item_name, issue_quantity, issue_to, issue_by, quantity) VALUES( new.id, new.last_updated, new.category_id, new.item_name, new.issue_quantity, new.issue_to, new.issue_by, new.quantity); END IF; END// DELIMITER ;
内容的提问来源于stack exchange,提问作者Bernard Ali
相关产品推荐
相关产品推荐

