MySQL desactivar todos los disparadores


Para probar la corrección de la consulta necesito desactivar todos los disparadores en la base de datos. Veo que en information_schema existen DESENCADENADORES de tabla. ¿Es posible desactivar temporalmente todos los disparadores usando esta tabla? Por ejemplo:

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

Y después de finalizar todas las pruebas devuelve todos los disparadores como:

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

Puede ser esto puede corromper db o después de disparadores no funciona? No lo encontré en la documentación.

Author: Brian Tompsett - 汤莱恩, 2011-06-25

2 answers

No puedes deshabilitar los disparadores directamente y no recomendaría hacer lo que estás sugiriendo, pero podrías hacer que tu disparador verifique si una variable (en mi ejemplo a continuación @disable_triggers) es NULL antes de ejecutar el contenido del disparador. Por ejemplo:

Consulta:

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

Desencadenantes:

IF @disable_triggers IS NULL THEN
    // Do something use as the trigger isn't disabled.
END IF;
 31
Author: Francois Deschenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-25 19:44:49

No es posible 'desactivar' los disparadores en mysql, sin embargo, un truco que se puede utilizar para evitar esto

Agregue una condición en sus disparadores como:

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

Y que si desea desactivar los disparadores en la importación solo:

SET @DISABLE_TRIGER = 1;

Do importaciones

SET @DISABLE_TRIGER = 0;
 -1
Author: ChrisBint,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-25 19:46:28