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我不知道。谢谢分享。:)