提问者:小点点

在mysql中创建触发器


我试图在插入后创建一个触发器,它将更新另一个表。

这是我尝试的代码:

delimiter |
CREATE TRIGGER augmenter_quantite_article AFTER INSERT
ON LigneInterventaire
FOR EACH ROW BEGIN
DECLARE @qte AS INTEGER;
DECLARE @code AS INTEGER;
SELECT @qte = qteInv FROM INSERTED;
SELECT @code = codeArt FROM INSERTED;
UPDATE Article SET qteArt = qteArt + @qte WHERE codeArt = @code;
END;

|

delimiter ;

但我会收到以下错误消息:

1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解使用“@qte AS integer”附近的正确语法;声明@code为整数;从INSERTED中选择@QTE=qteInv;%s“位于第4行


共1个答案

匿名用户

试试看

CREATE TRIGGER augmenter_quantite_article 
AFTER INSERT ON LigneInterventaire
FOR EACH ROW 
  UPDATE Article 
     SET qteArt = qteArt + NEW.qteInv
   WHERE codeArt = NEW.codeArt;

这里是SQLFiddle演示。

MySql的触发器实现有些有限。没有SQL Server中的虚拟表inserteddeleted本身。相反,您可以分别使用关键字oldnew访问正在插入或更新的行的旧值和新值。

由于它被归结为只有一个update语句,您不再需要使用beginend块。另一个优点-您也不需要更改delimiter;)