首页 > 解决方案 > 如何访问 MySQL 触发器中的“INSERTED”值?

问题描述

如何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.skuproducts表的外键。

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;

标签: mysqlsqltriggers

解决方案


鉴于:

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;

参考:


推荐阅读