Mysql:在一个流程中INSERT上的过程+触发器

时间:2014-09-04 14:43:18

标签: mysql sql stored-procedures triggers

1)我有一些表programs

2)我在 PROCEDURE 中更改了此表:

    CREATE PROCEDURE update_lessons_ord (IN courseId INT)
    BEGIN
            SET @ord :=0;
                UPDATE programs mcp_1
                    INNER JOIN programs mcp_2 ON mcp_1.id = mcp_2.id
                        SET mcp_1.ord = ( @ord := @ord +1 )
                            WHERE mcp_2.course_id = courseId;
    END;

3)我首先 TRIGGER (删除):

    CREATE TRIGGER `update_lessons_ord_after_delete` AFTER DELETE ON `programs`
    FOR EACH ROW
    BEGIN
        CALL update_lessons_ord(OLD.course_id);
    END;

它运作正常!

4)我有第二个 TRIGGER (插入):

    CREATE TRIGGER `update_lessons_ord_after_insert` AFTER INSERT ON `programs`
    FOR EACH ROW
    BEGIN
        CALL update_lessons_ord(NEW.course_id);
    END;

它工作错误:“无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用”。

在这种情况下如何使用程序

1 个答案:

答案 0 :(得分:0)

这是不可能的http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html

  

在存储的函数或触发器中,不允许修改a   已经被使用(用于读或写)的表   调用函数或触发器的语句