Подтвердить что ты не робот

Код ошибки MySQL 1235

В MySQL я попытался определить триггер следующим образом:

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 ;  

Выдает эту ошибку:

Эта версия MySQL еще не поддерживает "несколько триггеров с одинаковым временем действия и событием для одной таблицы.

Есть ли способ обойти это, чтобы я мог определить несколько триггеров?

4b9b3361

Ответ 1

Эта ошибка означает, что у вас уже есть триггер AFTER INSERT в таблице meetings.

Если это тот же самый триггер (что означает vipInvite), который вы создали ранее, и теперь вы хотите его заменить, вам нужно сначала его vipInvite

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

Теперь, если у вас есть еще один триггер, вам нужно объединить код из обоих триггеров в один, затем отбросить существующий триггер и затем создать новый.

Чтобы показать список существующих триггеров, используйте SHOW TRIGGERS.

SHOW TRIGGERS WHERE 'table' = 'meetings';

Ответ 2

Как воспроизвести эту ошибку в MySQL:

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

Выполните следующие запросы:

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

Если вы хотите подключить более одного действия к одному и тому же событию/таблице, вам придется втиснуть все его в один триггер. Вы можете вызвать многие хранимые процедуры следующим образом:

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