web-dev-qa-db-ja.com

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つのテーブルに対して同じアクション時間とイベントを持つ複数のトリガー」をまだサポートしていません。

複数のトリガーを定義できるように、これを回避する方法はありますか?

16
user2817052

このエラーは、AFTER INSERTmeetingsテーブルのトリガー。

前に作成したトリガーと同じトリガー(vipInviteを意味する)で、今すぐ置き換えたい場合は、最初にドロップする必要があります。

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

他のトリガーがある場合は、両方のトリガーのコードを1つにマージし、既存のトリガーをドロップしてから、新しいトリガーを作成する必要があります。

既存のトリガーのリストを表示するには、 SHOW TRIGGERS

SHOW TRIGGERS WHERE `table` = 'meetings';
26
peterm

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//
2
Eric Leschinski