24

为了测试查询的正确性,我需要禁用数据库中的所有触发器。我看到在 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'

可能这会损坏数据库或触发器不起作用?我没有在文档中找到它。

4

2 回答 2

34

您不能直接禁用触发器,我不建议您按照您的建议进行操作,但您可以让触发器检查变量(在下面的示例中@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;
于 2011-06-25T19:44:49.107 回答
-1

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

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

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

而不是如果您只想在导入时禁用触发器:

设置@DISABLE_TRIGER = 1;

做进口

SET @DISABLE_TRIGER = 0;
于 2011-06-25T19:46:28.343 回答