从订单数量mysql触发更新产品库存

时间:2017-04-06 18:30:55

标签: mysql triggers

我有两个表,ordersproducts。产品表的列名为Qty_On_Hand,用于存储库存中的产品数量。订单表包含一行Qty,其中输入了订购金额。我正在尝试创建一个触发器,根据订购的金额更新products表中的库存量。这些表格通过" ProductID "。

进行关联
UPDATE products
SET products.Qty_On_Hand = Products.Qty_On_Hand - orders. qty 
WHERE products.ProductID = orders.ProductID

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

这应该做的伎俩。您需要在每次插入新订单时执行的触发器。

CREATE TRIGGER  QuantityUpdate
AFTER INSERT
   ON orders FOR EACH ROW

BEGIN

UPDATE products
SET products.Qty_On_Hand = Products.Qty_On_Hand - New. qty 
WHERE products.ProductID = New.ProductID ;

END;

答案 1 :(得分:0)

有很多关于如何创建触发器的很好的例子。这在我的第一次搜索中加速:https://www.sitepoint.com/how-to-create-mysql-triggers/

不要忘记考虑是否可以更新/删除订单金额。

然而,尽管我认为触发器本身很好,但我很少倾向于使用它们。主要是因为很容易忘记它们。然后你彻底搜索你的代码,找出它为什么表现得像是,只是为了找出,代码本身没有答案。答案隐藏在数据库中。或者恰恰相反,你知道触发器在那里,并认为它是一个神奇的黑盒子,为你工作。因此,您不要仔细检查其功能,这可能适得其反。

https://stackoverflow.com/a/460343/7081773

因此,在您的位置,我会将逻辑移动到执行插入命令的代码中(除非您只在数据库中执行所有操作)。当然,这需要创建订单修改功能。这些功能也将处理库存修改。您将使用它们而不是直接的SQL查询。这样可以更好地控制代码库。

或者甚至更好,不要修改股票本身。在阅读应用程序的剩余库存时减去订购的金额(可能会创建一个视图)。仅在库存量真正发生变化时(例如产品发货时)修改库存量。通过这种方式,您可以了解库存中的数量,订购的数量,并且您可以随时计算可用的数量(库存 - 订购=可用)。当然,就像你开始时一样,你可以走另一条路。它也会起作用。这似乎对我的思想更合乎逻辑,因为我通常这样做......