2014-02-06 60 views
0
  1. 上選擇舊數據開始交易TX1
  2. TX1執行SELECT
  3. 提交TX1
  4. BEGIN TRANSACTION Tx2的在不同的會話,使用不同的連接
  5. Tx2的執行在一個Tx2的SELECT
  6. 更新行
  7. 提交Tx2的
  8. 開始一個新的事務,TX1
  9. 執行選擇 - 獲得來自步驟2的結果(?)
  10. 提交TX1
  11. BEGIN TRANSACTION TX1
  12. 執行選擇 - 得到正確的結果,即從Tx2的承諾更新

非常困惑......這是怎麼發生的?它發生可靠和一貫。的InnoDB/MySQL的 - 新的事務使用,而不是返回更新的數據

+1

如果8在7結束之前開始,並且您正在使用'READ UNCOMITTED'之上的隔離級別,則可能發生這種情況。 –

+0

事實並非如此:(7肯定是在8 – user2482461

回答

0

原來,如果事務隔離級別設置爲REPEATABLE READ,可能會發生這種情況。將事務隔離級別設置爲READ COMMITTED,一切都很順利。這真的不能解釋爲什麼(必須是某種BEGIN TRANSACTION掛起?)

+0

之前發生的事情)如果這是真的,那將是一個錯誤,而且'BEGIN TRANSACTION'會自動提交以前的任何事務 –

+0

@MarcusAdams在JDBC中,事務啓動是由驅動程序處理,而不是由開發人員明確執行'BEGIN TRANSACTION'。 –

相關問題