批量插入后MySQL触发器

标签 mysql triggers

我在 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 ;

SQL Fiddle example

关于批量插入后MySQL触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290204/

相关文章:

mysql - 为什么 MATCH AGAINST 返回的结果与 LIKE 不同?

python - Flask-SQLAlchemy 在创建表之前创建架构

javascript - 如何在mysql中成功插入数据后显示警告框?

php - 我想要一种方法来管理 2 个表之间的关系

google-apps-script - 如何使用应用程序脚本更新现有图表的数据范围? [谷歌表格]

plsql - 执行触发器期间出现“数字或值错误”

mysql - 多个MySQL操作对表交互

mysql - SQL 没有保存正确的浮点值

postgresql - Postgres 触发器

jquery - 单击以显示,然后单击另一个时将其隐藏