2013-06-03 137 views
0

我试图在插入后在表上创建一个触发器,它将更新另一个表。在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; DECLARE @code AS INTEGER; SELECT @qte = qteInv FROM INSERTED; S” 4行

+0

我认为你需要在存储过程或触发器中选择** INTO **。你不能只有一个选择自己挂起。另外,请仔细检查您是否必须使用':='而不是'=' – Sebas

回答

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声明,因此不再需要使用BEGIN END块。另外 - 你不需要改变DELIMITER;)

+0

'New'代表什么? –

+0

这是“插入”的模拟,但仅适用于正在插入的一行。这就是为什么它读'FOR EACH ROW ...' – peterm

+0

Okey非常感谢:) –