Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-特定列上的更新后触发器会影响表中的所有行_Mysql_Sql_Triggers_Sql Update - Fatal编程技术网

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; 总之,有两个问题: 是否允许使用

在我的数据库(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;
总之,有两个问题:

  • 是否允许使用更新后的
    触发器重置受影响的列值
  • 我们有一个触发器的问题,它使所有的行
    库存\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;