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?
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';
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//