You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 ;

代码解释

  1. 先切换到mydb库,避免后续操作重复指定库名的麻烦
  2. 修改分隔符为$$,因为触发器体里包含分号,防止MySQL提前结束语句解析
  3. 用AFTER INSERT ON Serie明确触发时机是在Serie表插入数据之后
  4. FOR EACH ROW表示每插入一行数据就执行一次触发器体
  5. 用NEW.idSerie获取刚插入的Serie行的idSerie值,插入到Documento表的对应列中

这样修改后,触发器就能正常工作啦——每次往Serie表插入新行时,都会自动在Documento表生成一条对应Serie_idSerie的记录。

内容的提问来源于stack exchange,提问作者Nacho -Marti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:18:57