如何在mysql中执行所有大容量插入后激活触发器

如何在mysql中执行所有大容量插入后激活触发器,mysql,triggers,Mysql,Triggers,我使用的是mysql,有大量插入到我的表中。 我的疑问是,如果我创建了一个指定插入后的触发器,那么每次插入后触发器都会被激活,这是我不希望发生的 在所有批量插入完成后,是否有办法激活触发器 有什么建议吗 谢谢。如果您关心的是性能,您可以放心,该操作非常快,即使它是在每个插入的行上分别执行的。但是,如果您真的认为这会导致性能问题,那么您应该对其进行分析 我能想到的唯一替代方法是删除触发器,执行插入查询,然后重新添加触发器,这实际上是一个可怕的解决方案(不幸的是,您无法在mysql中为会话禁用触发器

我使用的是mysql,有大量插入到我的表中。 我的疑问是,如果我创建了一个指定插入后
的触发器,那么每次插入后
触发器都会被激活,这是我不希望发生的

在所有批量插入完成后,是否有办法激活触发器

有什么建议吗


谢谢。

如果您关心的是性能,您可以放心,该操作非常快,即使它是在每个插入的行上分别执行的。但是,如果您真的认为这会导致性能问题,那么您应该对其进行分析

我能想到的唯一替代方法是删除触发器,执行插入查询,然后重新添加触发器,这实际上是一个可怕的解决方案(不幸的是,您无法在mysql中为会话禁用触发器-实际上您根本无法禁用它们)。

触发器语法(>>在insert on之后,看看是否可以实现这个技巧,基本上将触发器封装在由变量控制的if语句中,您可以打开和关闭该变量

if (@DISABLE_TRIGER <> 1 ) then
#trigger body
end if;

Postgresql有不同的触发器,但不知道Mysql是否提供了它们。从Mysql文档中可以看出:“InnoDB立即检查外键约束;检查不会延迟到事务提交。”因此,它的存储引擎依赖于一些外部源批量更新我的datbase,我想根据它提供的值填充一些额外的文件,顺便说一句,这是针对同一个表的。我认为,当触发器被激活并尝试更新表时,可能会导致冲突,而另一个插入正在针对同一个表进行y ideas?没有文档来确认这一点,但触发器可能会在插入下一行之前完成其工作。即使没有,mysql也会为您处理锁定。Innodb支持行级锁定,这意味着如果一个线程忙于更新一行,其他线程也无法更新该行。不要担心冲突。是否要更新触发器为其激活的同一行中的字段?是否要插入/更新另一行?它会给出以下错误`错误:ODBC:State S1000:[MySQL][ODBC 5.1驱动程序][mysqld-5.1.37]无法更新存储函数/触发器中的表“my_table”,因为调用此存储函数/触发器的语句已使用该表。我假设您想更新表中的另一行?如果您试图更新插入的同一行,请使用insert triggers中可用的新.col_名称语法。其他明智的做法是使用mysql events()定期执行您想要执行的操作。也许您应该为我们提供更多关于您想要实现的内容的上下文,以防止我们给出不起作用的答案。
SET @DISABLE_TRIGER = 1;

#do imports

SET @DISABLE_TRIGER = 0;