首先我有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
但这根本不起作用,它说语法错误
也许任何人都可以提供帮助
之前谢谢
答案 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