【问题标题】:Mysql: procedure + trigger on INSERT in one flowMysql:一个流程中的INSERT上的过程+触发器
【发布时间】:2014-09-04 14:43:17
【问题描述】:

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;

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

在这种情况下我该如何使用我的PROCEDURE

【问题讨论】:

  • 能贴出存储过程的代码吗?
  • 在这两种情况下都会产生错误,这里有一个SQL Fiddle的例子。

标签: mysql sql stored-procedures triggers


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多