web-dev-qa-db-fra.com

Code d'erreur MySQL 1235

Dans MySQL, j'ai essayé de définir un déclencheur comme celui-ci:

DELIMITER $$  
CREATE TRIGGER vipInvite  
AFTER INSERT ON meetings  
FOR EACH ROW   
BEGIN     
IF(NOT EXISTS (SELECT * FROM participants 
   WHERE meetid = NEW.meetid AND pid ='vip'))
    THEN  
    IF(EXISTS(SELECT * FROM meetings WHERE meetid = NEW.meetid AND slot > 16))  
    THEN  
    INSERT INTO participants(meetid, pid) 
    VALUES (NEW.meetid,(SELECT userid 
    FROM   people WHERE people.group = 'tap' GROUP BY invite));  
END IF;  
END IF;  
END $$  
DELIMITER ;  

Génère cette erreur:

Cette version de MySQL ne prend pas encore en charge plusieurs déclencheurs avec le même temps d'action et le même événement pour une table.

Existe-t-il un moyen de contourner ce problème afin que je puisse définir plusieurs déclencheurs?

16
user2817052

Cette erreur signifie que vous avez déjà un AFTER INSERT trigger sur meetings table.

S'il s'agit du même déclencheur (signifiant vipInvite) que vous avez créé précédemment et que vous souhaitez le remplacer, vous devez d'abord le supprimer

DROP TRIGGER vipInvite;
DELIMITER $$  
CREATE TRIGGER vipInvite
...
END$$
DELIMITER ;

Maintenant, si vous avez un autre déclencheur, vous devez fusionner le code des deux déclencheurs en un, puis supprimer le déclencheur existant, puis en créer un nouveau.

Pour afficher la liste des déclencheurs existants, utilisez SHOW TRIGGERS .

SHOW TRIGGERS WHERE `table` = 'meetings';
26
peterm

Comment reproduire cette erreur dans MySQL:

ERROR 1235 (42000): This version of MySQL doesn't yet support 'multiple 
triggers with the same action time and event for one table'

Exécutez les requêtes suivantes:

DELIMITER //
CREATE TRIGGER mytrigger1 AFTER INSERT ON mytable
FOR EACH ROW
BEGIN
END//

DELIMITER //
CREATE TRIGGER mytrigger2 AFTER INSERT ON mytable
FOR EACH ROW
BEGIN
END//

Si vous voulez accrocher plus d'une action au même événement/table, vous devrez tout entasser en un seul déclencheur. Vous pouvez appeler de nombreuses procédures stockées comme ceci:

DELIMITER //
CREATE TRIGGER mytrigger1 AFTER INSERT ON mytable
FOR EACH ROW
BEGIN
    CALL fromulate_the_moobars(NEW.myid);
    CALL its_peanut_butter_jelly_time(NEW.myname);
END//
2
Eric Leschinski