MySQL отключить все триггеры

Для проверки правильности запроса мне нужно отключить все триггеры в 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'

Может быть, это может повредить базу данных или после того, как триггеры не будут работать? Я не нашел об этом в документации.


person user810430    schedule 25.06.2011    source источник
comment
Таблицы information_schema все равно не могут быть изменены. На самом деле это представления: ссылка.   -  person Joel B Fant    schedule 26.06.2011
comment
@Joel B Fant - +1 Я понятия не имел. Спасибо, что поделился. :)   -  person Francois Deschenes    schedule 26.06.2011


Ответы (2)


Вы не можете отключить триггеры напрямую, и я бы не рекомендовал делать то, что вы предлагаете, но вы можете проверить свой триггер, если переменная (в моем примере ниже @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;
person Francois Deschenes    schedule 25.06.2011
comment
У меня около 1000 триггеров - очень сложно сделать то, что вы рекомендуете. - person Lorenzo Manucci; 25.06.2011
comment
@Lorenzo Manucci - боюсь, в MySQL нет способа отключить или включить триггеры. Вы должны либо пересоздать все триггеры, если это то, что вам нужно делать на постоянной основе, либо пересоздать их, если они не работают должным образом. Я не совсем уверен, что модификация базы данных information_schema — это хорошая идея, но если это решит вашу проблему, и это единовременно, сделайте резервную копию всех ваших баз данных и сделайте это. - person Francois Deschenes; 25.06.2011
comment
Проверьте текущее значение с помощью SELECT @disable_triggers; - person user427969; 19.02.2015

Невозможно «отключить» триггеры в mysql, однако трюк, который можно использовать, чтобы обойти это

Добавьте условие в свои триггеры, например:

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

и чем если вы хотите просто отключить триггеры при импорте:

УСТАНОВИТЬ @DISABLE_TRIGER = 1;

делать импорт

SET @DISABLE_TRIGER = 0;
person ChrisBint    schedule 25.06.2011
comment
А также я не могу изменить код триггеров, так как не являюсь автором - эти триггеры поправит другой человек, так как они работают не корректно, а мне нужно доделать свою работу - протестировать все запросы на вставку. - person Lorenzo Manucci; 25.06.2011