Mysql隔離等級

來源:互聯網
上載者:User

標籤:問題   共用鎖定   lan   col   刪除   --   取資料   就會   mysql隔離等級   

Mysql提供了4中隔離等級,在介紹這4中隔離等級前,先針對涉及的術語進行說明:

  1》、髒讀:一個事務讀取另外一個事務還沒有提交的資料叫髒讀【針對未提交的資料

  2》、不可重複讀取:即在同一個事務內,兩個相同的查詢返回了不同的結果【讀取資料本身的對比

  案例:設定事務的隔離等級讀提交:set session transaction isolation level read committed;   查看交易隔離等級:select @@tx_isolation;

    設定自動認可:SET AUTOCOMMIT=0;

    表tms_message_info資料:

    ID    file_name

              1     1111.SND

               2    2222.SND

事務A READ-COMMITTED 事務B READ-COMMITTED

start transaction;

select * from tms_message_info where id=‘1‘

start transaction;-- 開啟事務

update tms_message_info set FILE_NAME=‘666.SND‘ where ID=‘1‘; 未提交

B事務未提交前,A事務執行上述查詢,得到的檔案名稱結果為1111.SND commit;  B 事務提交
B事務提交後,A事務在執行查詢,結果發生變化,檔案名稱變為666.SND,即同一事務查詢結果不同,即不可重複讀取  

  3》、幻讀:即解決了不重複讀,保證了同一個事務裡,查詢的結果都是事務開始時的狀態(一致性),因此同一個事務同樣的SELECT操作讀到的結果會是一致的,但是,如果另一個事務同時提交了新資料或刪除資料,本事務再更新時,就會“驚奇的”發現了這些新增或缺少資料,貌似之前讀到的資料是“鬼影”一樣的幻覺【同一事務A多次查詢,若另一事務B只是update,則A事務多次查詢結果相同;若B事務insert/delete資料,則A事務多次查詢就會發現新增或缺少資料,出現幻讀,即幻讀關注讀取結果集條數變化

 

1、讀不提交(Read Uncommited,RU)

  這種隔離等級下,事務間完全不隔離,會產生髒讀,可以讀取未提交的記錄,實際情況下不會使用。

2、讀提交(Read commited,RC)

  本事務讀取到的是最新的資料(其他事務提交後的)。問題是,在同一個事務裡,前後兩次相同的SELECT會讀到不同的結果(不重複讀)

3、可重複讀(Repeatable Read,RR)【MySQL 預設的層級】

  在同一個事務裡,SELECT的結果是事務開始時時間點的狀態,因此,同一個事務同樣的SELECT操作讀到的結果會是一致的。但是,會有幻讀現象

4、 序列化(SERIALIZABLE)。讀操作會隱式擷取共用鎖定,可以保證不同事務間的互斥

 

隔離等級越高,並發性越差

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.