mysql的四種隔離等級

來源:互聯網
上載者:User

標籤:

  一、READ UNCOMMITTED(未提交讀)

    在READ UNCOMMITTED層級,事務中的修改,即使未提交,對其他事務也都是可見的。事務可以讀取未提交的資料,這也被稱為髒讀( Dirty READ )。這個層級會導致很多問題。從效能上來說,READ UNCOMMITTED不會比其他層級好太多,但是缺乏其       他層級的很多好處,除非真的有非常必要的理由,否則在實際開發中,一般很少使用。

  

  二、READ COMMITTED(提交讀)

    大多數資料庫系統預設的隔離等級都是READ COMMITTED,但是MySQL不是。READ COMMITTED滿足個理性的簡單定義:一個事務開始時,只能“看見”已經提交的事務所作的修改。換句話說,一個事務在開始到提交之前,所做的任何修改對其它事務是不       可見的。這個層級有時候也叫不可重複讀取(nonrepeatable),因為兩次執行同樣的查詢,可能會得到不同的查詢結果。

 

  三、REPEATABLE READ(可重複讀,MySQL預設隔離等級)

    這個是MySQL預設的隔離等級。REPEATABLE READ解決了髒讀的問題。該層級保證了在同一個事務中多次讀取同樣記錄的結果是一致的。但是在理論上,REPEATABLE READ隔離等級無法解決另外一個幻讀(Phantom Read)的問題。所謂幻讀,指的是當        某個事務在讀取某個範圍內的記錄時,另外一個事物又在該範圍插入入了新的記錄。當之前的事務再次讀取該範圍內的記錄時,會產生幻行(Phantom Row)。InnoDB和XtraDB儲存引擎通過多版本冰法控制(MVCC,  Multiverson Concurrency Control)解決了幻        讀問題。

 

  四、SERIALIZABLE(可序列化)

    SERIALIZABLE是最高的隔離等級。他通過強制事務串列執行,避免了前面說的幻讀問題。簡單來說,SERIALIZABLE會在讀取的每一行資料上都加鎖,所以可能導致大量的逾時和鎖爭用問題。實際應用中也很少用到這個隔離等級,只有在非常需要全確保數         據的一致性而且可以接受沒有並發的情況下,才考慮採用該層級。

 

                                                    表格歸納如下:

 

ANSI  SQL隔離等級
隔離等級 髒讀可能性 不可重複讀取可能性 幻讀可能性 加鎖度
 READ UNCOMMITTED  YES     YES  YES  NO 
READ COMMITTED  NO   YES  YES NO 
 REPEATABLE READ NO  NO  YES  NO 
 SERIALIZABLE NO   NO  NO  YES

   
 

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.