Select... 以嵌套方式进行更新和提交

Select... for update & commit, in nested fashion

我正在使用 MySQL Connector/C++,这是我的伪代码。我有两个函数和一个由这两个函数调用的公共函数:

CommonFunction()
{
   selects some rows for update
  // ... Do some transactions here ...
   commit transaction 
}

Function1()
{
  CommonFunction();
  // ... Do some activities here ...
}

Function2()
{
  selects some rows for update
  // ... Do some transactions here ...
  CommonFunction();
  // ... Do some other transactions here ...
  commit transaction 
}

问题:

如果我调用 Function1 它会调用 CommonFunction 锁定行以进行更新然后执行一些事务然后提交。工作正常。

但是当我调用 Function2 时,它会执行一些事务并调用 CommonFunction,在完成其工作后调用提交。但是此提交还会导致在 'some other transactions'.

之前释放在 Function2 中选择用于更新的行

谁能告诉我如何解决这个问题?请注意,出于演示目的,我使用最少的功能对其进行了解释。实际代码更复杂,我不想打扰模块化(例如,通过删除 CommonFunction 中的 commit 它将影响整个代码)。请问有什么建议吗?

已编辑

要获得类似于嵌套事务的内容,请使用 SAVEPOINT nameRELEASE SAVEPOINT name。对于 "rollback":ROLLBACK WORK TO SAVEPOINT name.

参考: http://dev.mysql.com/doc/refman/5.6/en/savepoint.html