17

在 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 尚不支持“对一个表具有相同操作时间和事件的多个触发器”。

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

4

2 回答 2

31

此错误意味着您已经在表上有一个AFTER INSERT触发器。meetings

如果它与vipInvite您之前创建的触发器(意思是)相同,现在您想替换它,那么您需要先删除它

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

现在,如果您有其他触发器,则必须将两个触发器的代码合并为一个,然后删除现有触发器,然后创建一个新触发器。

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

SHOW TRIGGERS WHERE `table` = 'meetings';
于 2013-09-26T06:19:21.263 回答
3

如何在 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//
于 2013-12-22T06:16:29.723 回答