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
を意味する)で、今すぐ置き換えたい場合は、最初にドロップする必要があります。
DROP TRIGGER vipInvite;
DELIMITER $$
CREATE TRIGGER vipInvite
...
END$$
DELIMITER ;
他のトリガーがある場合は、両方のトリガーのコードを1つにマージし、既存のトリガーをドロップしてから、新しいトリガーを作成する必要があります。
既存のトリガーのリストを表示するには、 SHOW TRIGGERS
。
SHOW TRIGGERS WHERE `table` = 'meetings';
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//
同じイベント/テーブルに複数のアクションをフックする場合は、すべてを1つのトリガーに詰め込む必要があります。次のような多くのストアドプロシージャを呼び出すことができます。
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//