为MYSQL触发器创建查询

时间:2013-08-22 18:00:27

标签: mysql triggers

首先我有2个名为“item”和“buy_item”的表 //“stock”列位于item表中,“qty”列是ini buy_item表 然后我有SQL SERVER查询来创建这样的触发器

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

但这根本不起作用,它说语法错误

也许任何人都可以提供帮助

之前谢谢

3 个答案:

答案 0 :(得分:1)

假设您无法在buy_item中更改项目ID,您的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 演示

答案 1 :(得分: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/

答案 2 :(得分:0)

这是我写完语法后的错误信息

  

DELIMITER $$
  CREATE TRIGGER trigger1
  在更新buy_item之前   对于每行开始
  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 Trigger1
在更新buy_item之前 对于每行“第1行”“

我的MySQL服务器版本是5.5.13