MySQL-特定列上的更新后触发器会影响表中的所有行
在我的数据库(MySQL)中,我有以下触发器-MySQL-特定列上的更新后触发器会影响表中的所有行,mysql,sql,triggers,sql-update,Mysql,Sql,Triggers,Sql Update,在我的数据库(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; 总之,有两个问题: 是否允许使用
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;
总之,有两个问题:
触发器重置受影响的列值
库存\u sku\u数量
变为零李>
相反,我只希望受影响的行为零,这意味着在
WHERE
子句中添加一个额外的条件。可以使用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;
开始
如果新库存库存库存单品数量<0,则
更新库存单品
设置库存\单品\数量=0
其中inventory\u id=NEW.inventory\u id;
结束;
结束;
新建。库存库存sku\u数量
是新插入行的值。因此,您的代码基本上对新插入的行符合某个条件的每一行执行更新,这将是所有行,因为该行的内容不会影响该条件
不需要更新,只需在更新之前在触发器中设置新行的值:
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;
创建触发器库存\u数量\u触发器
更新库存商品数量前
关于库存单品
开始
如果新库存库存库存单品数量<0,则
设置新库存\库存单位\数量=0
如果结束;
结束;
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;