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中的触发器语句错误的主要内容,如果未能解决你的问题,请参考以下文章