【问题标题】:How to access "INSERTED" values in a MySQL trigger?如何访问 MySQL 触发器中的“INSERTED”值?
【发布时间】:2019-03-02 23:24:37
【问题描述】:

如何在触发器中访问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;

【问题讨论】:

    标签: mysql sql triggers


    【解决方案1】:

    给定:

    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;
    

    参考资料:

    【讨论】:

    • 是否可以在 mysql 中加入 NEW,就像您可以在 SQL Server 中加入 INSERTED 一样...所以不要一次做一个?
    • 现在一切都说得通了。我以为NEW.qty 引用的是产品表而不是销售表。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多