Как удалить строку с триггером, когда ячейка имеет значение 0 - PullRequest
1 голос
/ 02 мая 2020

У меня есть таблица корзины, где клиенты могут добавлять, обновлять или удалять продукт из корзины. Другой способ удалить элемент - поместить значение 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 ;

1 Ответ

0 голосов
/ 03 мая 2020

Триггер не может воздействовать на таблицу, по которой он был запущен. Поэтому то, что вы просите, в принципе не может быть выполнено с помощью триггера.

Альтернативой может быть использование хранимой процедуры для реализации логики 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...