2013-08-22 59 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是