Как да проверите дали количеството съществува преди актуализация

Искам да създам тригер или съхранена процедура, която извежда грешка, ако количеството, което потребителят се опитва да вмъкне в поръчка, е по-голямо от наличното количество.

Така че основно имам 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