Mysql 如何使用触发器更新库存

Mysql 如何使用触发器更新库存,mysql,sql,triggers,Mysql,Sql,Triggers,这就是问题所在…我想更新数据库中的库存表,其中包括 Sale(ProductID,Quantity,Price) Invlevel(ProductID,Quantity) 我想为这个更新使用触发器。我想我必须使用两个触发器。1在销售桌上,大概是 Sale(ProductID,Quantity,Price) Invlevel(ProductID,Quantity) CREATE TRIGGER `sale_AINS` AFTE

这就是问题所在…我想更新数据库中的库存表,其中包括

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
我想为这个更新使用触发器。我想我必须使用两个触发器。1在销售桌上,大概是

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
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
有了这个触发器,当销售开始时,我想调整销售产品的库存水平。但是,即使在我插入sale表时此触发器没有错误并且运行正常,它也不会在Invlevel表中进行任何更改,我不知道为什么:@

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
而且,我在Invlevel表中这样做了触发器

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
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
*订单、再订单是其他表格

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
它告诉我,我有语法错误,我不知道它是什么,而且即使我找到它,我甚至不能检查逻辑,因为另一个触发器甚至不工作。。。任何关于它的想法或帮助都会非常有用。

试试看

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
第一个触发器

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
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关键字

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
第二个呢

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
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 ;
这里是更新的演示

试试看

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
第一个触发器

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
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关键字

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
第二个呢

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)
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 ;
这里是更新的演示

Sale(ProductID,Quantity,Price)                 
Invlevel(ProductID,Quantity)