2013-09-25 7 views
13

In MySQL versuchte ich so einen Trigger zu definieren:MySQL-Fehlercode 1235

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 ; 

Erzeugt diesen Fehler:

This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table.

Gibt es eine Möglichkeit, dies zu umgehen, so kann ich mehrere Trigger definieren ?

+0

Wie erwähnt https://dba.stackexchange.com/questions/105578/error-this-version-of-mariadb-doesnt-yet-support-multiple-triggers -with-the-s MySQL 5.7.2 und MariaDB 10.2.3 unterstützen mehrere Trigger auf die gleiche Aktion Zeit und Ereignis – Musa

Antwort

22

Dieser Fehler bedeutet, dass Sie bereits einen AFTER INSERT Trigger auf meetings Tabelle haben.

Wenn es die gleiche Trigger (dh vipInvite) ist, dass Sie zuvor erstellt haben und jetzt wollen Sie es ersetzen, dann müssen Sie es zuerst

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

Jetzt fallen, wenn Sie einen anderen Auslöser haben, müssen Sie fusionieren Code aus beiden Triggern in einen, dann lösche den bestehenden Trigger und erstelle dann einen neuen.

Um die Liste der vorhandenen Trigger anzuzeigen, verwenden Sie SHOW TRIGGERS.

SHOW TRIGGERS WHERE `table` = 'meetings'; 
+0

Es löste das Problem – user2817052

+3

@ user2817052 Großartig! Wenn Sie der Meinung sind, dass die Antwort hilfreich war, denken Sie bitte an ** [akzeptieren] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ** es. – peterm

1

Wie diese Fehler in MySQL reproduzieren:

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

Führen Sie die folgenden Abfragen:

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

Wenn Sie mehr als eine Aktion auf das gleiche Ereignis einzuhaken wollen/Tisch, müssen Sie alles in einen Auslöser stopfen. Sie könnten viele gespeicherte Prozeduren wie folgt aufrufen:

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// 
Verwandte Themen