SQL触发器语法报错求助:为何提示ON处存在语法错误?
解决MySQL触发器语法错误的问题
嘿,我看你在写触发器时碰到了语法报错,提示“ON”处有问题——这是因为你用了类似SQL Server的触发器语法,但MySQL的写法和它不一样哦,我来帮你修正一下:
错误原因分析
你的代码里有几个不符合MySQL触发器规范的地方:
- MySQL触发器不用
ON直接跟表名,而是要放在AFTER INSERT ON里指定触发时机和关联表 - 不需要
AS关键字,而是要用FOR EACH ROW声明这是行级触发器(每插入一行就触发一次) - MySQL没有
inserted临时表,而是用NEW关键字来引用刚插入到Serie表中的那行数据 - 另外
use mydb的位置也不对,应该在设置分隔符之前执行,否则会和delimiter的语法冲突
修正后的代码
USE mydb; DELIMITER $$ CREATE TRIGGER NuevaSerie AFTER INSERT ON `Serie` FOR EACH ROW BEGIN INSERT INTO Documento (Serie_idSerie) VALUES (NEW.idSerie); END$$ DELIMITER ;
代码解释
- 先切换到
mydb库,避免后续操作重复指定库名的麻烦 - 修改分隔符为
$$,因为触发器体里包含分号,防止MySQL提前结束语句解析 - 用
AFTER INSERT ON Serie明确触发时机是在Serie表插入数据之后 FOR EACH ROW表示每插入一行数据就执行一次触发器体- 用
NEW.idSerie获取刚插入的Serie行的idSerie值,插入到Documento表的对应列中
这样修改后,触发器就能正常工作啦——每次往Serie表插入新行时,都会自动在Documento表生成一条对应Serie_idSerie的记录。
内容的提问来源于stack exchange,提问作者Nacho -Marti
相关产品推荐
相关产品推荐

