【问题标题】:MySQL trigger after bulk insert批量插入后的 MySQL 触发器
【发布时间】:2014-08-13 15:27:32
【问题描述】:

我在 MySQL 表中批量插入可变数量的行:

INSERT INTO table (col1, col2) VALUES (0,0), (0,1), ..., (0,N)

第一列始终相同,第二列在每个条目中都会更改。现在我想实现一个 MySQL 触发器,它使用col1 来更新另一个表。例如

DELIMITER //

CREATE TRIGGER updateOtherTable AFTER INSERT ON table
  FOR EACH ROW BEGIN
    CALL someProcedure(NEW.col1);
  END;
//

但是,这将执行 someProcedure() N 次,这是不必要的,因为 col1 对于每个 INSERT 总是相同的。

是否可以只调用一次此触发器,如果​​可以,如何调用?

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    我认为您不能阻止对每一行执行触发器。

    一种选择是使用9.4. User-Defined Variables(注意用户定义的变量)来控制是否调用存储过程。

    类似:

    DELIMITER //
    
    CREATE TRIGGER `updateOtherTable` AFTER INSERT ON `table`
    FOR EACH ROW
    BEGIN
      IF @`callSomeProcedure` THEN
        SET @`callSomeProcedure` := NULL;
        CALL `someProcedure`(NEW.`col1`);
      END IF;
    END//
    
    DELIMITER ;
    

    SQL Fiddle example

    【讨论】:

      猜你喜欢
      • 2012-11-12
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-10-13
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多