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 ;
额外说明
- 临时分隔符可以选
//、$$这类不常用的符号,只要和你的SQL代码里的符号不冲突就行。 - 去掉
SUM()是因为它是聚合函数,用于对多行数据求和;而这里你是更新单条Invoice记录的已有值,直接做加法运算就足够了。
内容的提问来源于stack exchange,提问作者Adrian
相关产品推荐
相关产品推荐

