【问题标题】: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_id、item_id 和 quantity:
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);
其中1、2、3 分别是cart_id、item_id 和quantity。