我有两个表,orders
和products
。产品表的列名为Qty_On_Hand
,用于存储库存中的产品数量。订单表包含一行Qty
,其中输入了订购金额。我正在尝试创建一个触发器,根据订购的金额更新products表中的库存量。这些表格通过" ProductID "。
UPDATE products
SET products.Qty_On_Hand = Products.Qty_On_Hand - orders. qty
WHERE products.ProductID = orders.ProductID
任何帮助将不胜感激!
答案 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查询。这样可以更好地控制代码库。
或者甚至更好,不要修改股票本身。在阅读应用程序的剩余库存时减去订购的金额(可能会创建一个视图)。仅在库存量真正发生变化时(例如产品发货时)修改库存量。通过这种方式,您可以了解库存中的数量,订购的数量,并且您可以随时计算可用的数量(库存 - 订购=可用)。当然,就像你开始时一样,你可以走另一条路。它也会起作用。这似乎对我的思想更合乎逻辑,因为我通常这样做......