Триггер не может воздействовать на таблицу, по которой он был запущен. Поэтому то, что вы просите, в принципе не может быть выполнено с помощью триггера.
Альтернативой может быть использование хранимой процедуры для реализации логики c.
. Вот пример, который предполагает таблица 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
s таблицы cart
, в противном случае delete
s соответствующей записи.
Вы можете запустить процедуру с помощью следующего кода:
call update_cart(1, 2, 3);
Где 1
, 2
, 3
- соответственно cart_id
, item_id
и quantity
.