MySQL禁用所有触发器

MySQL禁用所有触发器,mysql,triggers,information-schema,Mysql,Triggers,Information Schema,为了测试查询的正确性,我需要禁用数据库中的所有触发器。 我看到在信息中存在着表触发器。 是否可以使用此表临时禁用所有触发器? 例如: update TRIGGERS set TRIGGERS_SCHEMA='myschema_new' where TRIGGERS_SCHEMA='myschema' 完成所有测试后,返回所有触发器,如: update TRIGGERS set TRIGGERS_SCHEMA='myschema' where TRIGGERS_SCHEMA='myschema

为了测试查询的正确性,我需要禁用数据库中的所有触发器。 我看到在信息中存在着表触发器。 是否可以使用此表临时禁用所有触发器? 例如:

update TRIGGERS set TRIGGERS_SCHEMA='myschema_new' 
where TRIGGERS_SCHEMA='myschema'
完成所有测试后,返回所有触发器,如:

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

这可能会损坏数据库,或者触发器无法工作?我没有在文档中找到它。

你不能直接禁用触发器,我也不建议你按照你的建议去做,但是你可以在执行触发器内容之前让你的触发器检查变量(在我下面的例子中
@disable\u 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;
触发器:

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;

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

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

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

我有近1000个触发器-很难做到你推荐的。@Lorenzo Manucci-恐怕没有办法在MySQL中禁用或启用触发器。如果需要经常执行此操作,则应重新创建所有触发器;如果触发器工作不正常,则应重新创建它们。我不完全相信修改
信息\u模式是一个好主意,但如果它解决了您的问题,这是一次性的事情,请备份您的所有数据库并继续。使用
选择@disable\u触发器检查当前值而且我不能更改触发器的代码,因为我不是作者-这些触发器将修复另一个人,因为他们工作不正确,但我需要完成我的工作-测试所有查询以进行插入。无论如何都不能修改
信息\u架构
表。它们实际上是视图:@Joel B Fant-+1我不知道。谢谢分享。:)