2013-09-25 64 views
13

在MySQL我试图像这样定义一个触发器:MySQL错误代码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 ; 

产生以下错误:

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

有没有办法来解决这个,所以我可以定义多个触发器?

+0

如前所述https://dba.stackexchange.com/questions/105578/error-this-version-of-mariadb-doesnt-yet-support-multiple-triggers -with-the-s MySQL 5.7.2和MariaDB 10.2.3支持同一动作时间和事件的多个触发器 – Musa

回答

22

此错误表示您已在meetings表上已有AFTER INSERT触发器。

如果是同一个触发器(意为vipInvite)早先创建,现在要替换它,那么你需要删除它首先

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

现在,如果你有你不得不合并一些其他触发代码从两个触发器合并为一个,然后删除现有的触发器,然后创建一个新的触发器。

要显示现有触发器的列表,请使用SHOW TRIGGERS

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

它解决了问题 – user2817052

+3

@ user2817052太棒了!如果您觉得答案有帮助,请考虑** [接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)**。 – peterm

1

如何重现此错误在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//