我正在使用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
。但是,此提交还会导致在Function2
中释放选定要进行更新的行,然后再执行“其他一些事务”。
有人可以告诉我怎么解决这个问题?请注意,出于演示目的,我已使用最少的功能对其进行了解释。实际代码更复杂,我不想打扰模块化(例如,删除commit
中的CommonFunction
会影响整个代码)。有什么建议吗?
答案 0 :(得分:0)
<强>被修改强>
要获得类似于嵌套事务的内容,请使用SAVEPOINT name
和RELEASE SAVEPOINT name
。对于&#34;回滚&#34;:ROLLBACK WORK TO SAVEPOINT name
。