MySQL中的触发器语句错误

Posted

技术标签:

【中文标题】MySQL中的触发器语句错误【英文标题】:Error in trigger statements in MySQL 【发布时间】:2013-05-28 02:33:05 【问题描述】:

我正在尝试在 mysql 触发器中执行以下语句(通过 phpmyadmin)

FOR EACH ROW BEGIN
DELETE from balancetable WHERE triggeredby="salesinvoices" AND invoiceNumber=NEW.invoiceNumber;

INSERT INTO balancetable SET invoiceNumber=NEW.invoiceNumber,ledgerId=NEW.buyerId,date=NEW.invoiceDate,company=NEW.companyId,type="debit",triggeredby="salesinvoices";
END;

我收到此错误:

MySQL said: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FOR EACH ROW BEGIN DELETE from balancetable WHERE triggeredby="salesinvoices" A' at line 1

从上一小时开始,我一直在努力解决这个问题。请指出我的愚蠢:)

【问题讨论】:

既然您找到了问题的解决方案,请将其发布为答案,以便其他人受益。 【参考方案1】:

您必须为触发器命名并定义何时触发它:

delimiter |
CREATE TRIGGER `some_name` AFTER UPDATE ON `salesinvoices`
FOR EACH ROW BEGIN
    DELETE from balancetable 
    WHERE triggeredby="salesinvoices" 
    AND invoiceNumber=NEW.invoiceNumber;

    INSERT INTO balancetable SET        
          invoiceNumber=NEW.invoiceNumber,
          ledgerId=NEW.buyerId,
          date=NEW.invoiceDate,
          company=NEW.companyId,
          type="debit",
          triggeredby="salesinvoices";
END;
| 
delimiter ;

【讨论】:

我是通过 phpmyadmin 来做的。 通过 phpmyadmin 在表上添加触发器。看我刚刚附上的截图。 我不熟悉 PHPAdmin,但我想您可以将 FOR EACH ROW BEGIN 留在该向导中,然后输入您的其他代码。 我试过了。它不起作用。它给了我以下错误: MySQL 说:#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的“INSERT INTO balancetable SET invoiceNumber=NEW.invoiceNumber,ledgerId=NEW.buyerI”附近使用正确的语法 让我们continue this discussion in chat

以上是关于MySQL中的触发器语句错误的主要内容,如果未能解决你的问题,请参考以下文章

纠正我在 mysql 触发器中的语法错误

触发器中的 MySQL IF 语句 - ELSE 不执行任何操作

phpmyAdmin 中的 MySQL 触发器错误

Trigger IF语句中的MySQL语法错误?

如何在mysql触发器中声明If语句

MySql 触发器删除同一张表中的子记录