2013-08-22 86 views
2

首先,我有2個名爲「item」和「buy_item」的表格 //「stock」列在項目表中,「qty」列是ini buy_item表格 然後我有SQL SERVER查詢創建這樣爲MYSQL觸發器創建查詢

CREATE TRIGGER trigger1 
ON dbo.buy_item 
FOR UPDATE 
AS begin 
UPDATE item SET stock = stock - qty FROM deleted WHERE item.id = deleted.id 
UPDATE item SET stock = stock + qty FROM inserted WHERE item.id = deleted.id 
end 

我需要幫助MySQL查詢 創建此查詢相同的功能,我已經做到這一點

CREATE TRIGGER trigger1 
BEFORE UPDATE ON buy_item 
FOR EACH ROW 
BEGIN 
UPDATE item SET stock = stock - buy_item.qty WHERE item.id=buy_item.id 
UPDATE item SET stock = stock + NEW.qty WHERE item.id=buy_item.id 
END 

觸發但這不是在所有的工作,它說的語法是錯誤的

也許有人能幫助瞭解這個

由於前

+0

請包括任何相關的錯誤在你的問題的消息。 – tadman

回答

1

假設你不能改變商品ID buy_item您在MySQL觸發應該是這樣的

CREATE TRIGGER trigger1 
AFTER UPDATE ON buy_item 
FOR EACH ROW 
    UPDATE item 
    SET stock = stock + NEW.qty - OLD.qty 
    WHERE id = NEW.id; 

這裏是SQLFiddle演示

+0

附近使用正確的語法!感謝您的解決方案,它真的幫助我:) –

0

MySQL中的觸發器主體需要許多由分號分隔的SQL命令(;)。要創建完整的觸發器代碼,必須將其自己的分隔符定義爲其他值 - 例如$$。

DELIMITER $$ 
CREATE TRIGGER trigger1 
BEFORE UPDATE ON buy_item 
FOR EACH ROW BEGIN 
UPDATE item SET stock = stock - buy_item.qty WHERE item.id=buy_item.id; 
UPDATE item SET stock = stock + NEW.qty WHERE item.id=buy_item.id; 
END$$ 

該網站爲幫助我在過去的語法和其他相關問題,MySQL和觸發 http://www.sitepoint.com/how-to-create-mysql-triggers/

+0

我已經嘗試去做,但它仍然要求我在這個語法 –

0

這是錯誤消息後我寫的語法

DELIMITER $ $
CREATE TRIGGER trigger1
之前更新buy_item
FOR EACH ROW BEGIN
UPDATE item SET stock = stock - buy_item.qty WHERE item.id = buy_item.id;
UPDATE item SET stock = stock + NEW.qty WHERE item.id = buy_item.id;
END $$

「您的SQL語法錯誤;檢查對應於您的MySQL服務器版本正確的語法使用近「DELIMITER $$手動
CREATE TRIGGER觸發器1
BEFORE UPDATE ON buy_item
FOR EACH ROW」第1' 行」

我的MySQL服務器版本5.5.13是