【MySQL之事務隔離級別】

    本文通過實例展示MySQL事務的四種隔離級別。

    1 概念闡述

    1)Read Uncommitted(讀未提交)

       其他事務的在未提交的改動下,當前事務可以察覺。

    2)Read Committed(讀提交)

       其他事務在提交改動之後,當前事務可以察覺,如果其他事務未提交改動,那麼不會察覺。

    3) Repeatable Read(可重複讀)

       其他事務提交了改動,並且當前事務也提交的操作,之後纔可以察覺改動。

    4) Serializable(可串行化的)

       通過加鎖方式,僅僅保持一個事務執行更新操作,如果其他事務執行更行操作,那麼將處於阻塞

    等待狀態。


    2 實例展示

    2.1 如何查詢當前MySQL的事務隔離級別

    wKiom1TvJ2WQCFt8AABVdQZ4GFY290.jpg

    MySQL默認隔離級別是Repeatable Read(可重複讀)

    2.2 設置當前會話的隔離級別

    wKioL1TvKOajzNsVAACMvJlRaf0017.jpg

    2.3 Read Uncommitted 隔離級別效果展示

    1.A,B兩個事務,將A事務設置爲Read Uncommitted事務隔離級別,當B事務,做修改後未提交,A事務可以發現B事務的修改內容。

    2.當A事務修改某條記錄時,B也修改某條記錄,會出現B阻塞等待現象,也就是說A事務修改會具有行級鎖。

    (A事務)

    wKioL1TvKeig7TBNAAB07h7ZgbM307.jpg

    (B事務修改數據,但不提交)

    wKiom1TvKV3hzouWAAB2dVI43Aw543.jpg

    (A事務可以察覺B事務修改的數據)

    wKioL1TvKrvyDmgGAABTY5qDLK4715.jpg

    從上述過程可以發現,在Read Uncommitted隔離級別下,事務之間的修改會相互察覺,因此容易出現髒讀現象。

    而且此時事務A:update counter set value=1002 where id=1,但不提交事務;事務B也執行update counter set value = 1004 where id = 1;會阻塞等待直到超時。原因是因爲事務A執行時,鎖住了id=1的這行記錄,因此其他事務必須等待處理完畢再執行;但是其他事務可以處理id!=1的記錄。

    2.4 Read Committed 隔離級別效果展示

    1. A、B兩個事務,假設A事務的隔離級別爲Read Committed,那麼B事務在執行commit之後,A事務可以發現B的修改。

    2. 與Read UnCommitted一樣,都存在行級鎖的現象。

    (A事務)

    wKiom1TvK_egT9DbAAEIfN30WuA213.jpg

    (B事務更新但未提交)

    wKiom1TvLsHDfe1JAAD1XJiQr0Q763.jpg

    (B事務提交後,A事務可以發現B的修改)

    wKioL1TvMGmBzRwRAABulsgCVNs281.jpg

    2.5 Repeatable Read(可重複讀)

    1. A、B事務,A事務爲Repeatable Read,當事務B修改後提交,A仍然無法察覺B的修改效果,而當A事務也提交之後,纔可以察覺B的修改。

    2. 同樣存在行級鎖的鎖定

    (A事務)

    wKioL1TvMoChe1RsAAEVqDAu61k018.jpg

    (B事務修改並提交,A事務仍然無法發覺B的修改)

    wKiom1TvMhbRxZ8kAAD6h5mOlP0808.jpg

    (A事務也提交後,可以發現B的修改)

    wKioL1TvM2nTh0QqAABk-DkaAZo083.jpg

    2.6 Serializable(可串行化的)

    1. A、B事務,A事務爲Serializable,那麼B不能執行任何更新操作,因爲A會獲取表級鎖,使得其他事務無法訪問。

    (A事務)

    wKioL1TvNGXg4VVHAAEUMvbkZGI922.jpg

    (B事務修改操作,無法執行)

    wKiom1TvNAWwNYuUAADdcbyu4dw303.jpg


    3 總結

    在MySQL中默認採用可重複讀(Repeatable Read)隔離級別。關於隔離級別的其他知識點以及更細微的介紹,本文不做過多介紹,僅僅介紹基本的概念和理解,如果有興趣的夥伴,可以考慮按照我這種模式,不斷實驗。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章