參考文章:
上面兩篇文章有詳細解釋,其中第二篇還有形象的事務圖
要弄清楚這個問題,首先要知道什么是隔離級別、隔離級別的作用是什么。
討論隔離級別的場景,主要是在 多個事務並發 的情況下
隔離級別:一個事務對數據庫的修改與並行的另一個事務的隔離程度
作用,即要解決的問題:
1.臟讀 (級別1可能會出現,級別2解決)
2.不可重復讀 (級別2可能會出現,級別3解決)
3.幻想讀 (級別3可能會出現,級別4解決)
oracle 的事務隔離級別:其他數據庫的隔離級別應該也是這些
級別1——讀未提交(read uncommitted)。事務A讀到了事務B 未提交 的數據,可能出現 臟讀,如果B回滾了事務,就會出現臟讀
級別2——讀提交(read committed)。事務A事先讀取了數據,事務B緊接了更新了數據,並提交了事務,而事務A再次讀取該數據時,數據已經發生了改變。可能出現 不可重復讀
級別3——重復讀(repeatable read)。 感覺這個不好理解,可能會出現 幻讀
級別4——串行化(serializable)。 最高級別的隔離級別。通過強制事務排序,使之不可能相互沖突,從而解決幻讀問題。簡言之,是在每個讀的數據行上加共享鎖。可能導致大量超時現象和鎖競爭
oracle支持 2種 事務隔離級別:讀提交、串行化 默認:讀提交
mysql支持 4種 事務隔離級別。默認:可重復讀
分別解決的問題具體見上面兩篇文章
如何 查看/修改 oracle的事務隔離級別:待完善