Vraag Hoe triggers in MySQL uit te schakelen?


In mijn MySQL-database heb ik een aantal triggers ON DELETE en ON INSERT. Soms moet ik een paar triggers uitschakelen, en dat moet ook DROP bijv.

DROP TRIGGER IF EXISTS hostgroup_before_insert //   

en installeer opnieuw. Is er een snelkoppeling naar SET triggers hostgroup_before_insert = 0 zoals we hebben voor buitenlandse sleutels:

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

BEWERK Antwoord Er bestaat geen ingebouwde serversysteemvariabele TRIGGER_CHECKS in MySQL.
Een eenvoudige oplossing is om in plaats daarvan een door de gebruiker gedefinieerde sessievariabele te gebruiken.

#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') 

Deze TRICK is hier uitgelegd.


15
2017-11-28 05:02


oorsprong


antwoorden:


Het is niet mogelijk om triggers tijdelijk uit te schakelen. Doe één ding, gebruik één globale variabele. Trigger controleert eerst de waarde van de globale variabele eerst. In dit geval kunt u de waarde van de globale variabele wijzigen om de werking van de trigger te voorkomen.


3
2017-11-28 05:15