如何在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
是它可能是這樣嗎?
我已經編輯我的帖子檢查,如果它在你的情況下幫助 – Anuj