我想创建一个触发器,在下订单后减少可用商品的数量。
我试图创建一个触发器。我正在使用 phpMyAdmin,在表 products_in_order
AFTER INSERT
SET @qtt = (
SELECT quantity
FROM products_in_order
ORDER BY inorder_id DESC
LIMIT 1)
SET @code = (
SELECT product_code
FROM products_in_order
ORDER BY inorder_id DESC
LIMIT 1)
UPDATE products
SET quantity = quantity-@qtt
WHERE product_code=@code
为什么第一个 SET
可以工作,第二个也可以,但是当我同时编写它们时,我会收到错误消息?
如何让这个触发器正常工作?
示例数据:
products
表示商店中所有可用的产品,并且有列:
product_code | name | price | quantity
product_in_order
表示一组相同类型的产品,可以添加到订单中。它有列:
inorder_id |产品代码 |价格 |订单号
inorder_id | product_code | price | quantity | order_no
当有人在订单中添加一组产品时,我希望该产品的总数量减少。
最佳答案
您不需要重新连接到新插入/更新的表* - 只需使用 New
pseudo row从你的触发器中,它已经有你需要加入主 Product
表的值:
CREATE TRIGGER `MyTrigger`
AFTER INSERT ON `products_in_order`
FOR EACH ROW
BEGIN
UPDATE products
SET quantity = quantity-New.quantity
WHERE product_code=New.product_code;
END;
SqlFiddle here证明 Product
的起始值已被插入到适用产品代码的 products_in_order
中的数量所耗尽。
*
假设 inorder_id
是一个 AUTO_INCREMENT,在没有任何锁定考虑的情况下从该表中选择两次也容易出现并发问题,例如如果另一个作者在您的触发器执行时插入了另一行。使用 New
关于mysql - 触发减少计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29833368/