2

我有 2 个存储过程 A、B,它们都在一个事务块中。问题是 A 调用 B,因此存在递归/嵌套事务。我不确定有没有问题?当我打电话给 A 时会发生什么?

引用自《MySQL 存储过程编程》:

START TRANSACTION表示新交易的开始。如果现有事务已经在进行中,START TRANSACTION则将发出隐含的COMMIT. 当您发出START TRANSACTION时,自动提交属性(将在下一节中描述)有效且隐式地设置为 0,直到事务结束。START TRANSACTION我们建议您在任何语句之前显式提交或回滚现有事务,因为COMMIT对于阅读或维护您的代码的人来说,隐式可能并不明显。

4

3 回答 3

2

如果两个过程都在同一资源上设置/使用锁,那么您将遇到死锁。B在某些A也需要的表/行/字段上持有锁,这意味着A无法获得自己的锁。所以A会坐下来等待获取锁,直到 DBMS 超时并回滚。

于 2011-06-01T14:14:51.977 回答
0

对的,这是可能的。他们只是不能重叠。您可以使用 SAVEPOINT 来完成。

看到这个答案:

事务内的Mysql事务

于 2013-11-02T23:22:47.450 回答
0

只要 B 不也调用 A,你就没有递归的情况,只是一个嵌套事务 - 这应该没问题。

于 2011-06-01T14:09:33.037 回答