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

MySQL创建跨表更新触发器时遭遇1064语法错误

解决MySQL触发器语法错误(Error Code: 1064)的问题

嘿,这问题我太熟了!你遇到的根本不是SUM函数的问题,而是MySQL语句分隔符的冲突导致的语法错误。

问题根源

MySQL默认的语句分隔符是;,当你编写包含BEGIN...END块的触发器时,块内部的;会被MySQL误判为整个CREATE TRIGGER语句的结束标记,所以它会在你还没写完触发器的时候就停止解析,进而抛出“第6行语法错误”的提示——哪怕第6行看起来是空的,实际上是MySQL提前终止解析导致的。

修复方案

解决方法很简单:先临时修改语句分隔符,等触发器创建完成后再改回默认的;。另外顺便提一句,你原来用SUM()是多余的(甚至会引发其他问题),因为你是针对单条Invoice记录做字段累加,直接用字段自加逻辑就可以了。

下面是修正后的完整SQL代码:

-- 临时修改分隔符为//,避免和触发器内的;冲突
DELIMITER //

CREATE TRIGGER makePayment AFTER INSERT ON Payments
FOR EACH ROW
BEGIN
    UPDATE Invoice 
    SET InvoiceClientPaid = InvoiceClientPaid + NEW.PaymentAmt 
    WHERE InvoiceID = NEW.PaymentInvoiceID;
END //

-- 改回默认的语句分隔符;
DELIMITER ;

额外说明

  1. 临时分隔符可以选//、$$这类不常用的符号,只要和你的SQL代码里的符号不冲突就行。
  2. 去掉SUM()是因为它是聚合函数,用于对多行数据求和;而这里你是更新单条Invoice记录的已有值,直接做加法运算就足够了。

内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:54