如果 MySQL 中仍有未提交/未回滚的事务,我如何让我的事务等待?
目前我在代码端进行交易,而不是在数据库存储过程端,如下所示:
cmd.Connection.BeginTransaction();
try {
// db codes here
cmd.Transaction.Commit();
} catch {
cmd.Transaction.Rollback();
throw;
} finally {
cmd.Connection.Close();
}
我希望其他交易等到前一个交易完成。因为我有,在我的一些存储过程中,MAX(id)
当插入外键时,它id
会在同一个事务中创建一个自动递增的列。但是当同时发生 2 个事务时,它不适用于我上面的当前设置,发生的事情是这样的:
Begin Trans1
Begin Trans2
Trans1: insert a values(); --id = 1
Trans2: insert a values(); --id = 1
Trans1: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 1
Trans2: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 1
Commit Trans1
Commit Trans2 --id = 2, aid = 1
我希望是这样的:
Begin Trans1
Wait Trans2
Trans1: insert a values(); --id = 1
Trans1: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 1
Commit Trans1
Begin Trans2
Trans2: insert a values(); --id = 2
Trans2: insert b(aid, col1) values((select MAX(id) from a), 'test'); --aid = 2
Commit Trans2
有可能这样吗?