当单元格的值为 0 时,如何使用触发器删除行

How do I delete a row with trigger when a cells has a value of 0

我有一个购物车 table,客户可以在其中添加、更新或从购物车中删除产品。另一种删除项目的方法是将值 0 放入数量列中。我尝试使用触发器删除该行,但它不会删除它。我该如何解决这个问题?

这是我试过但不起作用的方法

DELIMITER $$
CREATE TRIGGER tr_remove_cart_item
AFTER UPDATE ON cart
for each row
IF NEW.quantity <= 0
THEN
    DELETE FROM cart
    WHERE NEW.quantity <= 0;
END IF;

DELIMITER ;

触发器无法对触发它的 table 进行操作。所以你要求的东西,基本不能用触发器完成。

另一种方法是使用存储过程来实现逻辑。

这是一个示例,假设 table cart 具有列 cart_iditem_idquantity:

delimiter //
create procedure update_cart(
    in p_cart_id int,
    in p_item_id int,
    in p_quantity int
)
begin
    if p_quantity > 0 then
        update cart 
        set quantity = p_quantity 
        where cart_id = p_cart_id and item_id = p_item_id;
    else
        delete from cart
        where cart_id = p_cart_id and item_id = p_item_id;  
    end if;
end //
delimiter ;

程序接收三个参数作为输入;如果 quantity 大于 0,则 updatecart table,否则 delete 为相应的记录。

您可以运行使用以下代码的程序:

call update_cart(1, 2, 3);

其中123分别是cart_iditem_idquantity