Как я могу просмотреть запрос для списка продуктов после заказа (ТРИГГЕР)

#mysql #sql #triggers

#mysql #sql #триггеры

Вопрос:

Мои таблицы:

                       Orders                                               Products
Id(PK) |Quantity | Date | ProdIdFK |OrdFK(ref CustomerID)       ProdID(PK) | Quantity  | Name

 

и таблица клиентов.
Я должен сделать заказ с помощью триггера, поэтому я делаю:

 INSERT into Orders(Id, Quantity, Date, ProdIDFK, OrdFK) 
    values(3, 2, '2020/01/27', 15, 2);

CREATE TRIGGER  QuantityUpdate
AFTER INSERT
   ON Orders FOR EACH ROW
   
BEGIN
UPDATE Products
SET products.Quantity = Products.Quantity - New.Quantity 
WHERE products.ProdID = New.ProdID

END$
DELIMITER ;
 

Но просто ничего не происходит, он показывает старое количество и не меняется. Я попытался вставить INSERT после BEGIN (я не знаю, какой правильный), а также ничего. Какой правильный запрос для этого?

Ответ №1:

Ваш код триггера выглядит нормально — возможно, кроме сбоя в имени столбца, обнаруженного Гордоном Линоффом.

Однако, если вы хотите, чтобы он запускался по INSERT оператору, который показан в вашем скрипте, вам нужно сначала создать его INSERT .

 CREATE TRIGGER QuantityUpdate 
AFTER INSERT ON Orders FOR EACH ROW
BEGIN
   ...
END$
DELIMITER ;

INSERT into Orders(Id, Quantity, Date, ProdIDFK, OrdFK) 
VALUES(3, 2, '2020-01-27', 15, 2);
 

После создания триггера он срабатывает для каждого вставленного заказа. Однако у него нет возможности учитывать вставки, которые произошли до его создания.

Комментарии:

1. Я пробовал это, но это не помогло. Я думаю, что это должно быть проблемой в триггере.

2. ссылка Что здесь не так?

Ответ №2:

По крайней мере, синтаксис неверен либо в INSERT триггере, либо в триггере, потому что один использует ProdIdfk , а другой ProdId .

Если первое — правильное имя, то триггер должен быть:

 UPDATE Products p
    SET p.Quantity = p.Quantity - New.Quantity 
    WHERE p.ProdID = New.ProdIDFK;
 

Комментарии:

1.Я исправил это, но ничего не произошло, все значения по-прежнему остаются. Здесь ссылки на экраны таблиц заказов и продуктов, может быть, здесь есть какие-то proplems? ссылка на ссылку И здесь исправлен ТРИГГЕР: ссылка