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

标签 mysql sql stored-procedures triggers

1) 我有一些表程序

2)我有程序在此表中进行更改:

    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)我有第二个触发器(插入):

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

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

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

最佳答案

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

Within a stored function or trigger, it is not permitted to modify a table that is already being used (for reading or writing) by the statement that invoked the function or trigger

关于Mysql:在一个流程中 INSERT 上的过程 + 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25668411/

相关文章:

Mysql 求和两列时间戳

sql - HQL查询中的LIKE

SQL删除列中具有相同值的行

stored-procedures - 存储过程尝试读取未提交的数据,尽管将隔离级别指定为读取已提交

MySQL Server 5.0 命令行客户端无法打开文件 .sql

java - 使用 Oracle DBMS : No matching username found in Principals 登录 JBOSS

c# - HibernateException : Could not create the driver from NHibernate. 驱动程序.MySqlDataDriver

mysql - JDBC 连接 : access denied

mysql - 具有双重嵌套级别的 SQL 查询

sql-server - SQL Try Catch 在存储过程中 - 我这样做对吗?