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/