文章相關視頻出處:https://developer.aliyun.com/lesson_1698_13612#_13612
目錄
併發事務問題
·髒讀:讀取到另一個事務的未提交更新數據
·不可重複讀:兩次讀取不一致
·幻讀:讀到另一事務已提交數據
髒讀概念舉例
事務1:張三給李四轉賬100元
事務2:李四查看自己的賬戶
·t1:事務1:開始事務
·t2:事務1:張三給李四轉賬100元
·t3:事務2:開始事務
·t4:事務2:李四查看自己的賬戶,看到賬戶多出100元(髒讀)
·t5:事務2:提交事務
·t6:事務1:回滾事務,回到轉賬之前的狀態
不可重複讀概念舉例
事務1:酒店查看兩次1048號房間狀態
事務2:預定1048房間
·t1:事務1:開始事務
·t2:事務1:查看1048號放假狀態爲空閒
·t3:事務2:開始事務
·t4:事務2:預定1048號房間
·t5:事務2:提交事務
·t6:事務1:再次查看1048號房間狀態爲使用
·t7:事務1:提交事務
對同一記錄的兩次查詢結果不一致(從控制角度來看,只需鎖住滿足條件的記錄)
幻讀概念舉例
事務1:對酒店房間預訂記錄兩次統計
事務2:添加一條預定房間記錄
·t1:事務1:開始事務
·t2:事務1:統計預定記錄100條
·t3:事務2:開始事務
·t4:事務2:添加一條預定房間記錄
·t5:事務2:提交事務
·t6:事務1:再次統計預定記錄爲101條
·t7:事務1:提交事務
對同一表的兩次查詢不一致(從控制角度來看,要鎖住滿足條件相似的記錄)
事務四大隔離級別
1 Serializable 串行化(基本不用)
·不會出現任何併發問題
·性能最差
2 Repeatable read 可重複讀(mysql默認隔離級別)
·防止髒讀和不可重複讀,不能處理幻讀
·性能比 Serializable 好
3 Read committed 讀已提交數據(oracle默認隔離級別)
·防止髒讀,沒有處理不可重複讀和幻讀
·性能比 Repeatable read好
4 Read uncommitted 讀未提交數據(基本不用)
·可能出現任何事務併發問題
·性能最好
select @@tx_isolation查詢數據庫事務隔離級別
jdbc設置隔離級別connection.setTransactionIsolation(int level)