我在 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 总是相同的
。
是否可以仅调用此触发器一次,如果可以,如何调用?
最佳答案
我不认为你可以阻止触发器对每一行的执行。
一种选择是使用 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 ;
关于批量插入后MySQL触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290204/