我使用的是mysql,并且有大量的插入内容会进入我的桌面。
我怀疑的是,如果我创建一个指定after insert
的触发器,那么触发器将为每个insert after
激活,我不想发生这种情况。
在完成所有批量插入后,有没有办法激活触发器?
有什么建议吗?
感谢。
答案 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语句就是你检查的触发器国旗。虽然感觉有点像黑客。也许你可以给我们更多的背景,可能有一种更好的方法来剥皮这只猫。