触发减少计数器

时间:2015-04-23 20:10:06

标签: mysql database

我想创建一个触发器,以便在订单完成后减少可用商品的数量。

我试图创建一个触发器。我正在使用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

当有人在订单中添加一组产品时,我希望该产品的总量减少。

1 个答案:

答案 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

的另一个好理由