我想创建一个触发器,以便在订单完成后减少可用商品的数量。
我试图创建一个触发器。我正在使用phpMyAdmin,在表AFTER INSERT
products_in_order
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 | product_code |价格| order_no
inorder_id | product_code | price | quantity | order_no
当有人在订单中添加一组产品时,我希望该产品的总量减少。
答案 0 :(得分:1)
您无需加入新插入/更新的表格* - 只需使用触发器中的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