Mysql交易隔離等級學習

來源:互聯網
上載者:User

標籤:

這篇文章主要談談Mysql交易隔離等級的區別,以及自己的一些感受。

自己一直以來沒搞懂“可重複讀”和可提交讀“兩者之間的區別,通過此次的實踐,清楚了兩者之間的區別。廢話不說,先看看這幾個交易隔離等級。

Mysql資料庫總共分為四個交易隔離等級,其中預設的交易隔離等級是:repeatable read,而與其它的資料庫不同的是,其它的資料庫預設交易隔離等級是read committed(SQL Server、Oracle)。

第一步:SERIALIZABLE

Instance 1:

Instance 2:

可以看到,第二個事務會被BLOCK住,一致顯示正在執行中,最終會顯示逾時。

總結:SERIALIZABLE的交易隔離等級是:在一個事務沒有執行完畢之前,第二個事務是無法繼續執行的;這也與SERIALIZABLE是順序執行事務這一點相吻合。

 

第二步:REPEATABLE READ

Instance 1:

Instance 2:

可以看到,在將資料庫交易隔離等級設定為REPEATABLE READ之後,第一個事務在執行插入並提交之後,第二個事務並沒有查詢到插入的記錄。這就是資料庫中的“幻讀”現象,但是在SERIALIZABLE層級下就不會出現這種現象。

總結:REPEATABLE READ層級並沒有SERIALIZABLE層級隔離程度高,會導致“幻讀”現象。

 

第三步:READ COMMITTED

Instance 1:

Instance 2:

可以看到,在第一個事務插入一條記錄並且提交之後,在第二個事務中能看到插入的記錄。

總結:READ COMMITTED顧名思義,可以讀到已經提交的資料,但這也會造成同一個使用者運行同一個語句兩次,可能會得到不同的結果。

 

第四步:READ UNCOMMITTED

Instance 1:

Instance 2:

可以看到,READ UNCOMMITTED層級甚至可以讀取到未提交的資料,這是相當危險的!如果事務由於其它原因復原了,就會讀取到已經棄用的資料。

總結:READ UNCOMMITTED是四個交易隔離等級中最低的,可以讀取到未提交的資料。

 

開放學習:四個交易隔離等級的效能應當是:serializable<repeatable read<read committed<read uncommitted,這個有待於以後實際測試。

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.