2013-09-25 10 views
13

In MySQL ho cercato di definire un innesco come questo:MySQL codice di errore 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 ; 

Produce questo errore:

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

C'è un modo per risolvere questo in modo da poter definire più trigger ?

+0

Come accennato https://dba.stackexchange.com/questions/105578/error-this-version-of-mariadb-doesnt-yet-support-multiple-triggers -with-the-s MySQL 5.7.2 e MariaDB 10.2.3 supportano più trigger sullo stesso tempo di azione ed evento – Musa

risposta

22

Questo errore significa che già un AFTER INSERT trigger su meetings tavolo.

Se è lo stesso grilletto (che significa vipInvite) creata in precedenza e ora si vuole sostituirlo allora avete bisogno di farlo cadere prima

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

Ora, se avete qualche altro innesco si deve fondersi codice da entrambi i trigger in uno, quindi rilasciare il trigger esistente e quindi crearne uno nuovo.

Per visualizzare l'elenco di trigger esistenti utilizzare SHOW TRIGGERS.

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

Ha risolto il problema – user2817052

+3

@ user2817052 Ottimo! Se ritieni che la risposta sia stata utile per favore, considera ** [accetta] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ** it. – peterm

1

come riprodurre questo errore in MySQL:

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

eseguire le seguenti query:

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

Se si desidera collegare più di un'azione sullo stesso evento/tavolo, dovrai stipare tutto in un unico trigger. Si potrebbe chiamare molte stored procedure in questo modo:

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