stored procedure
如果我在内部调用 astored procedure
会自动提交,这是预期的行为吗?
例子:
伪过程 proc1
create procedure proc1(in var1 int, out var2 int)
begin
start transaction;
-- some code here
commit;
end
伪过程proc2,将调用proc1
create procedure proc2()
lbl_begin:
begin
start transaction;
-- modify some data here
call proc1(0, var2);
if var != 0 then
rollback;
leave lbl_begin;
end;
commit;
end;
即使执行了 proc2 上的回滚,在调用 proc1 之前修改的数据仍然被提交。
它是一个错误还是它的预期行为?
-- https://dev.mysql.com/doc/refman/8.0/en/commit.html
和
-- https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html
也就是说,proc1 的
START
关闭 proc2 的START
。第一个
ROLLBACK
关闭唯一打开的事务,因此第二个ROLLBACK
没有什么可以“回滚”。