Как получить доступ к «INSERTED» значениям в триггере MySQL?

Как я могу получить доступ к значениям таблицы 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;
4 голоса | спросил Jane 3 MaramSun, 03 Mar 2019 02:24:37 +03002019-03-03T02:24:37+03:0002 2019, 02:24:37

1 ответ


0

Дано:

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;

Литература:

ответил paulsm4 3 MaramSun, 03 Mar 2019 02:41:40 +03002019-03-03T02:41:40+03:0002 2019, 02:41:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132