当单元格的值为 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_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
,则 update
为 cart
table,否则 delete
为相应的记录。
您可以运行使用以下代码的程序:
call update_cart(1, 2, 3);
其中1
、2
、3
分别是cart_id
、item_id
和quantity
。
我有一个购物车 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_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
,则 update
为 cart
table,否则 delete
为相应的记录。
您可以运行使用以下代码的程序:
call update_cart(1, 2, 3);
其中1
、2
、3
分别是cart_id
、item_id
和quantity
。