我有2个存储过程A,B,两者都在事务块中。问题是A调用B,因此,存在递归/嵌套事务。我不确定是否有问题?当我打电话给A时会发生什么?
引自“MySQL存储过程编程”:
START TRANSACTION
表示新交易的开始。如果现有交易已在进行中,则START TRANSACTION
将发出隐式COMMIT
。当您发出START TRANSACTION
时,自动提交属性(在下一节中描述)会有效且隐式地设置为0,直到事务结束。我们建议您在任何START TRANSACTION
语句之前显式提交或回滚现有事务,因为隐含的COMMIT
对于阅读或维护代码的人来说可能并不明显。
答案 0 :(得分:2)
如果两个程序在同一资源上设置/使用锁定,那么您将遇到死锁。 B
对A
也需要的某些表/行/字段进行锁定,这意味着A
无法获得自己的锁定。所以A
会等待获取锁定,直到DBMS将其计时并将其推回去。
答案 1 :(得分:0)
只要B不调用A,你就没有递归的情况,只是一个嵌套的事务 - 这应该没问题。
答案 2 :(得分:0)