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 .
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.