Как проверить, существует ли количество перед обновлением

Я хочу создать триггер или хранимую процедуру, которая выдает ошибку, если количество, которое пользователь пытается вставить в заказ, превышает доступное количество.

Итак, в основном у меня есть 2 таблицы: Order_Product с идентификаторами OrderId, Product_Id и Quantity и Inventory с идентификаторами Product_Id и Quantity. Поэтому, если пользователь пытается вставить строку для определенного product_id в Order_Product с количеством, превышающим количество, доступное для того же product_id в Inventory, перед вставкой будет выдано сообщение об ошибке.

Заранее спасибо.


person jfbribeiro    schedule 02.12.2020    source источник
comment
Я склоняюсь к триггеру и сигнализирую dev.mysql.com/doc/refman /8.0/en/signal.html   -  person P.Salmon    schedule 02.12.2020
comment
если пользователь пытается вставить строку для определенного product_id в Order_Product с количеством, превышающим количество, доступное для того же product_id в Inventory Может ли пользователь вставить 2 строки, которые совпадают по отдельности, но превышают сумму в сумме ? это законно?   -  person Akina    schedule 02.12.2020


Ответы (1)


Я думаю, что следующий триггер делает то, что вы хотите:

delimiter //

create trigger trg_order_product_insert
before insert on order_product
for each row
begin
    if (new.quantity > (select quantity from inventory where product_id = new.product_id)) then
        signal sqlstate '45000' set message_text = 'not enough quantity available in inventory';
    end if;
end
//

delimiter ;

Имея под рукой эту настройку, вам также нужно подумать о том, как поддерживать доступное количество в актуальном состоянии в таблице inventory. Возможно, вы захотите добавить оператор update к приведенному выше триггеру, который уменьшает инвентарь продукта.

person GMB    schedule 02.12.2020
comment
Благодарю вас ! У меня уже есть один триггер, который это делает, но только после вставки в таблицу order_product. - person jfbribeiro; 02.12.2020