批量插入后的MySQL触发器

时间:2014-08-13 15:27:32

标签: mysql triggers

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

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

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

DELIMITER //

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

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

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

1 个答案:

答案 0 :(得分:0)

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

一种选择是使用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