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 name
和 RELEASE SAVEPOINT name
。对于 "rollback":ROLLBACK WORK TO SAVEPOINT name
.
我正在使用 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 name
和 RELEASE SAVEPOINT name
。对于 "rollback":ROLLBACK WORK TO SAVEPOINT name
.