Как получить доступ к "INSERTED" значениям в триггере MySQL? - PullRequest
0 голосов
/ 03 марта 2019

Как мне получить доступ к значениям таблицы INSERTED в триггере?

Например:

INSERT INTO sales (sku, qty) 
VALUES
(1001, 5), //I need these values in the trigger
(1002, 1)
...

Это мой триггер:

DELIMITER $$

CREATE TRIGGER after_sales_insert 
AFTER INSERT ON sales 
FOR EACH ROW BEGIN

    UPDATE products
    SET NEW.qty = OLD.qty - INSERTED.qty
    WHERE sku = INSERTED.sku;

END;
$$
DELIMITER;

Обратите внимание, что sales.sku является внешним ключом для таблицы products.

В SQL Server есть ключевое слово INSERTED, которое, похоже, не работает для MySQL.

Ответ:

NEW.qty ссылается на qty в таблице, для которой установлен триггер, не в обновляемой таблице.

CREATE TRIGGER after_sales_insert 
AFTER INSERT ON sales 
FOR EACH ROW BEGIN

    UPDATE products
    SET qty = qty - NEW.qty
    WHERE sku = NEW.sku;

END;

1 Ответ

0 голосов
/ 03 марта 2019

Дано:

INSERT INTO sales (sku, qty) 
VALUES
(1001, 5), //I need these values in the trigger
(1002, 1)
...

Я полагаю, вы хотите это:

CREATE TRIGGER after_sales_insert AFTER INSERT ON sales 
FOR EACH ROW BEGIN
    UPDATE products
    SET qty = qty - NEW.qty
    WHERE sku = NEW.sku;
END;

Ссылки:

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