MySQL禁用所有触发器

时间:2011-06-25 19:37:31

标签: mysql triggers information-schema

对于查询的测试正确性,我需要禁用db中的所有触发器。 我看到在information_schema中存在表TRIGGERS。 可以暂时禁用使用此表的所有触发器吗? 例如。喜欢:

update TRIGGERS set TRIGGERS_SCHEMA='myschema_new' 
where TRIGGERS_SCHEMA='myschema'

并在完成所有测试后返回所有触发器,如:

update TRIGGERS set TRIGGERS_SCHEMA='myschema'
where TRIGGERS_SCHEMA='myschema_new'

可能是这样可以破坏数据库或者触发后不起作用?我没有在文档中找到它。

2 个答案:

答案 0 :(得分:32)

你不能直接禁用触发器,我不建议你做什么建议但你可以让你的触发器检查一个变量(在我的@disable_triggers下面的例子中)是NULL之前执行触发器的内容。例如:

<强>查询:

SET @disable_triggers = 1;
// Your update statement goes here.
SET @disable_triggers = NULL;

<强>触发器:

IF @disable_triggers IS NULL THEN
    // Do something use as the trigger isn't disabled.
END IF;

答案 1 :(得分:-1)

在mysql中无法“禁用”触发器,但是可以用来解决这个问题的技巧

在触发器中添加条件,如:

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

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

SET @DISABLE_TRIGER = 1;

做进口

SET @DISABLE_TRIGER = 0;