Код ошибки 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 еще не поддерживает "несколько триггеров с одинаковым временем действия и событием для одной таблицы.
Есть ли способ обойти это, чтобы я мог определить несколько триггеров?
Ответы
Ответ 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//