这里有问题......我想更新我的数据库中的库存表,其中包括
Sale(ProductID,Quantity,Price)
Invlevel(ProductID,Quantity)
我想使用触发器进行此更新。我必须使用2个触发器(我认为)。 1在销售表中将是类似
CREATE TRIGGER `sale_AINS` AFTER INSERT ON sale FOR EACH ROW
begin
update Invlevel set quantity = Invlevel.quantity-"sale.quantity" where
Invlevel.ProductID = "sale.ProductID";
END
有了这个触发器,当销售出现时,我想调整销售所在产品的库存水平。但是,即使这个触发器没有错误并且在我插入销售表时正常运行,它也不会在Invlevel表中进行任何更改,我不知道为什么(:@)。
此外,我在Invlevel表格中触发了
CREATE TRIGGER `invlevel_AUPD` after UPDATE on invlevel FOR EACH ROW
if invlevel.quantity < 20
begin
insert into orders
(select productid,amount from reorder where reorder.productid = invlevel.productid )
end
*(订单,重新订购是其他表格)
它告诉我,我有语法错误,我不知道它是什么,即使我发现它我甚至无法检查逻辑,因为另一个触发器甚至没有工作...任何想法或帮助它会非常有帮助。
答案 0 :(得分:3)
尝试
第一次触发
CREATE TRIGGER sale_AINS
AFTER INSERT ON sale
FOR EACH ROW
UPDATE invlevel
SET quantity = quantity - NEW.quantity
WHERE productid = NEW.productid;
在此触发器中,您不需要BEGIN END
块,因为只有一个语句。要访问列值或插入的行,您需要使用NEW
关键字。
第二个
DELIMITER $$
CREATE TRIGGER invlevel_AUPD
AFTER UPDATE ON invlevel
FOR EACH ROW
BEGIN
IF NEW.quantity < 20 THEN
INSERT INTO orders (productid, amount)
SELECT productid, amount
FROM reorder
WHERE productid = NEW.productid;
END IF;
END$$
DELIMITER ;
在第二个触发器中IF
语句超出了BEGIN END
块,IF
的语法错误。它应该是IF ... THEN ... END IF;
。与NEW
关键字相同的问题。
这是 SQLFiddle 演示
您可以将IF
条件纳入WHERE
条款,并使其更加简洁
CREATE TRIGGER invlevel_AUPD
AFTER UPDATE ON invlevel
FOR EACH ROW
INSERT INTO orders (productid, amount)
SELECT productid, amount
FROM reorder
WHERE productid = NEW.productid
AND NEW.quantity < 20;
此处已更新 SQLFiddle 演示