在UPDATE之后创建触发器以更新另一个表

时间:2013-06-04 21:52:44

标签: mysql triggers

我正在尝试在Update之后在表上创建一个触发器,它将更新另一个表。

这是我尝试过的代码:

DELIMITER //
CREATE TRIGGER `update_quantite_article` AFTER UPDATE ON `LigneInterventaire` 
FOR EACH ROW
BEGIN
DECLARE qte AS INTEGER;
SET qte = NEW.qteInv - OLD.qteInv;
UPDATE Article 
     SET qteArt := qteArt + qte
   WHERE codeArt = NEW.codeArt
END;
//
DELIMITER ;

但我收到此错误消息:

  

1064 - 您的SQL语法出错;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   'AS INTEGER附近; SET qte = NEW.qteInv - OLD.qteInv;更新文章   SET qteArt ='第4行

1 个答案:

答案 0 :(得分:1)

(你有问题吗?我打算进行插补,并期待你提出一个问题,比如“如何解决这个问题?”。更简单的一点就是你提供一份关于状态的报告你当前的发展努力。)

要解决此问题,只需在DECLARE之后移动BEGIN语句。

另外,仅使用@qte替换对qte的引用。 (即我建议您使用过程变量而不是用户变量。如果您不知道差异,那么过程变量很可能就是您真正想要的。)

看起来您完全避免使用变量,如果qteInv列定义为INTEGER类型,则不依赖于转换为字符(如用户变量的情况),或计数对变量引入的其他一些特殊处理。

未来的代码读者可以更轻松地编写代码:

CREATE TRIGGER `update_quantite_article` AFTER UPDATE ON `LigneInterventaire`
FOR EACH ROW
BEGIN
  UPDATE Article
     SET qteArt = qteArt + ( NEW.qteInv - OLD.qteInv )
   WHERE codeArt = NEW.codeArt
END