Как отключить триггеры в MySQL? - программирование
Подтвердить что ты не робот

Как отключить триггеры в MySQL?

В моей базе данных MySQL у меня есть триггеры ON DELETE и ON INSERT. Иногда мне нужно отключить некоторые триггеры, и мне нужно DROP например.

DROP TRIGGER IF EXISTS hostgroup_before_insert //   

и переустановите. Есть ли ярлык для SET triggers hostgroup_before_insert = 0, как у внешних ключей:

mysql> SELECT version();
+-------------------------+
| version()               |
+-------------------------+
| 5.1.61-0ubuntu0.10.10.1 |
+-------------------------+
1 row in set (0.00 sec)

EDIT Ответ В MySQL нет встроенной системной переменной сервера TRIGGER_CHECKS.. Простым обходным решением является использование пользовательской переменной сеанса.

#FALSE value overrides trigger type settings
SET @TRIGGER_CHECKS = [TRUE|FALSE]; 

SET @TRIGGER_BEFORE_INSERT_CHECKS = [TRUE|FALSE];
SET @TRIGGER_AFTER_INSERT_CHECKS = [TRUE|FALSE];

DELIMITER $$
DROP TRIGGER IF EXISTS `yearCheck_beforeInsert` $$
CREATE DEFINER=`root`@`localhost` TRIGGER `yearCheck_beforeInsert`
BEFORE INSERT ON `movies` FOR EACH ROW 

#Patch starts here
thisTrigger: BEGIN
  IF ((@TRIGGER_CHECKS = FALSE)
      OR (@TRIGGER_BEFORE_INSERT_CHECKS = FALSE))
    AND (USER() = '[email protected]') 

Этот TRICK объясняется здесь.

4b9b3361

Ответ 2

Невозможно временно отключить триггеры. Вы делаете одну вещь, используя одну глобальную переменную. Сначала Trigger сначала проверит значение глобальной переменной. В этом случае вы можете изменить значение глобальной переменной, чтобы предотвратить работу триггера.