【发布时间】:2014-12-26 17:57:45
【问题描述】:
在我的数据库 (MySQL) 中,我有以下触发器 -
CREATE TRIGGER inventory_qty_trigger
AFTER UPDATE OF inventory_sku_quantity ON inventory_sku
BEGIN
UPDATE inventory_sku
SET inventory_sku_quantity = 0
WHERE NEW.inventory_sku_quantity < 0;
END;
目标是使inventory_sku_quantity 小于零时为零。但是我们观察到的是,当我们更新一个 sku 数量小于零的商品时,所有的 sku 数量都变为零了。
似乎 where 条件不正确 - WHERE NEW.inventory_sku_quantity < 0; 而应该是
CREATE TRIGGER inventory_qty_trigger
AFTER UPDATE OF inventory_sku_quantity
ON inventory_sku
BEGIN
UPDATE inventory_sku
SET inventory_sku_quantity = 0
WHERE inventory_id = NEW.inventory_id
AND NEW.inventory_sku_quantity < 0;
END;
总结两个问题:
- 是否允许使用
AFTER UPDATE触发器来重置受影响的列值。 - 我们有问题的触发器使所有行
inventory_sku_quantity变为零。
相反,我只希望受影响的行为零,这意味着在 WHERE 子句中添加一个额外的条件。
【问题讨论】:
标签: mysql sql triggers sql-update