web-dev-qa-db-fra.com

Comment désactiver les déclencheurs dans MySQL?

Dans ma base de données MySQL, j'ai quelques déclencheurs ON DELETE et ON INSERT. Parfois, je dois désactiver certains déclencheurs et je dois DROP par ex.

DROP TRIGGER IF EXISTS hostgroup_before_insert //   

et réinstallez. Y a-t-il un raccourci vers SET triggers hostgroup_before_insert = 0 comme pour les clés étrangères:

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

[~ # ~] modifier [~ # ~] Réponse Il n'y a aucune variable système de serveur intégrée TRIGGER_CHECKS dans MySQL .
Une solution simple consiste à utiliser à la place une variable de session définie par l'utilisateur.

#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() = 'root@localhost') 

Cette astuce est expliquée ici .

18
Grijesh Chauhan

Il n'est pas possible de désactiver temporairement les déclencheurs. Faites une chose, utilisez une variable globale. Le déclencheur vérifiera d'abord la valeur de la variable globale en premier. Dans ce cas, vous pouvez modifier la valeur de la variable globale pour empêcher le fonctionnement du déclencheur.

5
Fathah Rehman P