如何在mysql中的所有批量插入后激活触发器

时间:2010-03-01 13:40:22

标签: mysql triggers

我使用的是mysql,并且有大量的插入内容会进入我的桌面。 我怀疑的是,如果我创建一个指定after insert的触发器,那么触发器将为每个insert after激活,我不想发生这种情况。

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

有什么建议吗?

感谢。

3 个答案:

答案 0 :(得分:2)

看看here,看看你是否可以实现这个技巧,基本上将触发器包装在一个if语句中,该语句由一个可以打开和关闭的变量控制

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

并且如果你想在导入时禁用触发器:

SET @DISABLE_TRIGER = 1;

#do imports

SET @DISABLE_TRIGER = 0;

答案 1 :(得分:1)

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

我能想到的唯一选择是删除触发器,执行插入查询,并重新添加触发器,这实际上是一个可怕的解决方案(遗憾的是你无法在mysql中禁用会话的触发器 - 实际上你无法禁用它们在所有)。

答案 2 :(得分:0)

触发器语法(&gt;&gt;插入&lt;&lt;之后)固有地表示将为每个插入完成。我不知道如何关闭它。一个可能的解决方法可能是在insert语句中有一个标志(其中一个列的一些魔术值,例如-200的id列?),这对于最后一个插入只有一个,然后有一个if语句就是你检查的触发器国旗。虽然感觉有点像黑客。也许你可以给我们更多的背景,可能有一种更好的方法来剥皮这只猫。