2

首先我有 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

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

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

之前谢谢

4

3 回答 3

1

假设您无法buy_item在 MySql 的触发器中更改项目 ID 应该如下所示

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演示

于 2013-08-23T06:38:52.890 回答
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/

于 2013-08-22T19:15:15.257 回答
0

这是我编写语法后的错误消息

DELIMITER $$
CREATE TRIGGER trigger1
BEFORE ON UPDATE ON buy_item
FOR EACH 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;
结束$$

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在第 1 行的‘DELIMITER $$
CREATE TRIGGER Trigger1
BEFORE ON UPDATE ON buy_item
FOR EACH ROW’附近使用正确的语法’”

我的 MySQL 服务器版本是 5.5.13

于 2013-08-23T03:32:53.277 回答