在我的数据库(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
小于零时使WHERE NEW.inventory_sku_quantity < 0;
为零。但我们观察到的是,当我们更新sku数量小于零的项目时,所有sku数量都变为零。
看来where条件不正确 - 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
变为零。 相反,我只希望受影响的行为零,这意味着在{{1}}子句中添加额外条件。
答案 0 :(得分:2)
NEW.inventory_sku_quantity
是新插入的行的值。因此,您的代码基本上在新插入的行符合某些条件的每一行上执行更新,这将是所有条件,因为行的内容不会影响条件。
而不是更新,您只需要在before update
触发器中设置新行的值:
CREATE TRIGGER inventory_qty_trigger
BEFORE UPDATE OF inventory_sku_quantity
ON inventory_sku
BEGIN
IF NEW.inventory_sku_quantity < 0 THEN
SET NEW.inventory_sku_quantity = 0
END IF;
END;
答案 1 :(得分:1)
您可以使用if条件实现此目的。
BEGIN
if NEW.inventory_sku_quantity < 0 then
UPDATE inventory_sku
SET inventory_sku_quantity = 0
WHERE inventory_id = NEW.inventory_id ;
end;
END;