2013-06-03 228 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非常感謝:) –