mysql - 如何访问 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.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;
解决方案
鉴于:
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;
参考:
推荐阅读
- html - 如何将水平滚动的 div 向右对齐?
- pandas - 使用 write_pandas 方法时出现 TypeError
- reactjs - 在头部添加标题的问题
- swiftui - SwiftUI 将 func 作为参数传递,其中 func 具有通用参数
- python - 使用 Google Speech-to-Text 进行流式语音识别会导致不正确的时间戳记录
- javascript - 全新 Macbook Pro 无法运行 Gatsby 主题 Apollo Docs
- flutter - 如何获取包含在类中的 TextEditingController 的值?
- php - PHP中的匿名函数和静态匿名函数到底有什么区别?
- javascript - 安装全局 npm 包后出现“错误:ENOENT:没有这样的文件或目录”
- javascript - 过滤复杂对象中的数组数组并返回该对象