#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? ссылка на ссылку И здесь исправлен ТРИГГЕР: ссылка