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;
它工作错误:“无法更新存储函数/触发器中的表,因为它已被调用此存储函数/触发器的语句使用”。
在这种情况下如何使用程序?
答案 0 :(得分:0)
这是不可能的http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html
在存储的函数或触发器中,不允许修改a 已经被使用(用于读或写)的表 调用函数或触发器的语句