【问题标题】:How do I delete a row with trigger when a cells has a value of 0当单元格的值为 0 时,如何使用触发器删除一行
【发布时间】:2020-05-02 20:59:54
【问题描述】:

我有一个购物车表,客户可以在其中添加、更新或从购物车中删除产品。删除项目的另一种方法是将值 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 ;

【问题讨论】:

  • 在触发器中你不能在同一张表上使用删除或更新。

标签: mysql database sql-update sql-delete database-trigger


【解决方案1】:

触发器无法操作触发它的表。所以你要求的基本上不能用触发器来完成。

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

这是一个示例,假设表 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,则updatescart表,否则deletes对应记录。

您可以使用以下代码运行该过程:

call update_cart(1, 2, 3);

其中123 分别是cart_iditem_idquantity

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 2018-04-14
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多