递归/嵌套事务

时间:2011-06-01 14:01:51

标签: mysql sqltransaction

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

引自“MySQL存储过程编程”:

  

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

3 个答案:

答案 0 :(得分:2)

如果两个程序在同一资源上设置/使用锁定,那么您将遇到死锁。 BA也需要的某些表/行/字段进行锁定,这意味着A无法获得自己的锁定。所以A会等待获取锁定,直到DBMS将其计时并将其推回去。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

是的,有可能。他们只是不能重叠。你可以使用SAVEPOINT来做到这一点。

看到这个答案:

Mysql transactions within transactions