Mysql 如何在插入触发器之前创建多个触发器?

Mysql 如何在插入触发器之前创建多个触发器?,mysql,Mysql,我正试图更深入地学习mysql,包括关系、触发器等等。我的数据库目前有以下两个触发器: 我正在尝试添加另一个,它将在插入另一个表之前 但我一直在犯这样的错误: 我不确定如何解决这个问题,或者如果这是Sequel Pro(我正在使用的GUI)特有的,它似乎在内部包装了查询,所以我只需要输入基本的内容,有什么方法可以让它工作吗?我的模式如下: Forum\u线程有许多Forum\u帖子 Forum\u Posts有许多Posts\u回复 Forum\u线程和Forum\u帖子都有回复计数器,因

我正试图更深入地学习mysql,包括关系、触发器等等。我的数据库目前有以下两个触发器:

我正在尝试添加另一个,它将在插入另一个
表之前

但我一直在犯这样的错误:

我不确定如何解决这个问题,或者如果这是Sequel Pro(我正在使用的GUI)特有的,它似乎在内部包装了查询,所以我只需要输入基本的内容,有什么方法可以让它工作吗?我的模式如下:

Forum\u线程
有许多
Forum\u帖子

Forum\u Posts
有许多
Posts\u回复


Forum\u线程
Forum\u帖子
都有回复计数器,因此在插入或删除回复时,我尝试增加/减少这两个表上的
reply\u计数
。谢谢。

问题是GUI正在尝试对已具有before insert类型触发器的表执行
创建触发器。检查“Forum_threads”表,查看是否已经有更新前触发器。

MySQL 5.7.2之前的版本

给定表不能有多个具有相同触发器的触发器 触发事件和动作时间。例如,之前不能有两个 更新表的触发器。但是你可以有一个更新前和 插入前触发器,或更新前和更新后触发器

(请参见5.6手册。)


但是,您可以在给定触发器的主体内指定多个操作,尽管每个事件一个触发器的限制会使管理触发器操作变得不方便。

在插入触发器之前不可能“创建”多个触发器,但您可能的解决方法是为每种类型的事件设置行为

类似这样的东西可能会帮助您:

DROP TRIGGER IF EXISTS `<your_trigger>`;
DELIMITER //
CREATE TRIGGER `<your_trigger>` BEFORE INSERT ON `<your_table>`
FOR EACH ROW BEGIN
    CASE <your_identifier>
        WHEN <first_type> THEN
            /*
                ACTION BLOCK
                FOR THIS EVENT
            */
        WHEN <second_type> THEN
            /*
                ACTION BLOCK
                FOR THIS EVENT
            */
        ELSE
            /*
                ACTION BLOCK
                FOR THIS EVENT
            */
    END;
END//
DELIMITER ;  
DROP触发器(如果存在)`;
分隔符//
在插入之前创建触发器“`”``
每行开始
案例
什么时候
/*
动作块
为了这次活动
*/
什么时候
/*
动作块
为了这次活动
*/
其他的
/*
动作块
为了这次活动
*/
结束;
结束//
定界符;
您可以根据需要添加任意数量的事件类型,通过这样做,您可以创建一个触发器,该触发器具有基于给定事件类型标识符的多个操作

我希望这能帮助你,干杯

请看这里: