【MySQL之交易隔離等級】

來源:互聯網
上載者:User

標籤:mysql 隔離等級

    本文通過執行個體展示MySQL事務的四種隔離等級。

    1 概念闡述

    1)Read Uncommitted(讀未提交)

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

    2)Read Committed(讀提交)

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

    3) Repeatable Read(可重複讀)

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

    4) Serializable(可序列化的)

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

    等待狀態。


    2 執行個體展示

    2.1 如何查詢當前MySQL的交易隔離等級

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/59/EC/wKiom1TvJ2WQCFt8AABVdQZ4GFY290.jpg" title="1.png" alt="wKiom1TvJ2WQCFt8AABVdQZ4GFY290.jpg" />

    MySQL預設隔離等級是Repeatable Read(可重複讀)

    2.2 設定當前會話的隔離等級

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/59/E8/wKioL1TvKOajzNsVAACMvJlRaf0017.jpg" title="2.png" alt="wKioL1TvKOajzNsVAACMvJlRaf0017.jpg" />

    2.3 Read Uncommitted 隔離等級效果展示

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

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

    (A事務)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/59/E8/wKioL1TvKeig7TBNAAB07h7ZgbM307.jpg" title="3.png" alt="wKioL1TvKeig7TBNAAB07h7ZgbM307.jpg" />

    (B事務修改資料,但不提交)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/59/EC/wKiom1TvKV3hzouWAAB2dVI43Aw543.jpg" title="4.png" alt="wKiom1TvKV3hzouWAAB2dVI43Aw543.jpg" />

    (A事務可以察覺B事務修改的資料)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/59/E8/wKioL1TvKrvyDmgGAABTY5qDLK4715.jpg" title="5.png" alt="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事務)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/59/EC/wKiom1TvK_egT9DbAAEIfN30WuA213.jpg" title="6.png" alt="wKiom1TvK_egT9DbAAEIfN30WuA213.jpg" />

    (B事務更新但未提交)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/59/EC/wKiom1TvLsHDfe1JAAD1XJiQr0Q763.jpg" title="7.png" alt="wKiom1TvLsHDfe1JAAD1XJiQr0Q763.jpg" />

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

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/59/E9/wKioL1TvMGmBzRwRAABulsgCVNs281.jpg" title="8.png" alt="wKioL1TvMGmBzRwRAABulsgCVNs281.jpg" />

    2.5 Repeatable Read(可重複讀)

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

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

    (A事務)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/59/E9/wKioL1TvMoChe1RsAAEVqDAu61k018.jpg" title="9.png" alt="wKioL1TvMoChe1RsAAEVqDAu61k018.jpg" />

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

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/59/EC/wKiom1TvMhbRxZ8kAAD6h5mOlP0808.jpg" title="10.png" alt="wKiom1TvMhbRxZ8kAAD6h5mOlP0808.jpg" />

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

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/59/E9/wKioL1TvM2nTh0QqAABk-DkaAZo083.jpg" title="11.png" alt="wKioL1TvM2nTh0QqAABk-DkaAZo083.jpg" />

    2.6 Serializable(可序列化的)

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

    (A事務)

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/59/E9/wKioL1TvNGXg4VVHAAEUMvbkZGI922.jpg" title="12.png" alt="wKioL1TvNGXg4VVHAAEUMvbkZGI922.jpg" />

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

    650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/59/EC/wKiom1TvNAWwNYuUAADdcbyu4dw303.jpg" title="13.png" alt="wKiom1TvNAWwNYuUAADdcbyu4dw303.jpg" />


    3 總結

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

本文出自 “java程式冥” 部落格,請務必保留此出處http://793404905.blog.51cto.com/6179428/1615550

【MySQL之交易隔離等級】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.