高效能mysql 隔離級別介紹

2021-09-25 15:37:59 字數 819 閱讀 2530

在sql的標準中定義了四種隔離級別。每一種級別都規定了乙個事務中所做的修改,哪些在事務核心事務間是可見的,哪些是不可見的。較低階別的隔離通常可以執行更高的併發,系統的開銷也更低。

下面介紹一下四種隔離級別。

未提交讀(read uncommit)   在這個級別,事務中的修改,即使沒有提交,對其他事務也是可見的,事務可以讀取未提交的讀,這也被稱為髒讀,這個級別會導致很多問題,除非有必要的理由,實際中很少採用。

提交讀 (read commit) 大多數資料庫系統打的預設隔離級別都是read commit,但是mysql不是。read commit滿足前面提到的隔離性的簡單定義:乙個事務開始時,只能看見已經提交的事務所做的修改。注意是修改,不是insert。這個級別也叫做不可重複讀,因為兩次執行同樣的查詢,可能得到不一樣的結果。原因是容易解釋,讀的時候允許修改,修改提交之後,讀的結果就會不一樣。

可重複讀(repeatable)解決了髒讀的問題,該級別保證了了在同乙個事務中多次讀取同樣記錄的結果是一致的。但是理論上,可重複讀隔離級別還是無法解決另外乙個幻讀的問題。所謂幻讀,指的是當某個事務在讀取某個範圍內的記錄時,另外乙個事務又在該範圍內插入了乙個新的記錄。當之前的事務再次讀取該範圍內的資料時,會產生幻行。innodb通過mvcc(多版本併發控制機制)解決了幻讀的問題。這裡強調下,幻讀和提交讀的不同之處是乙個是插入操作,乙個是修改操作。

可序列化(serializable)這是最高的隔離級別。它通過強制事務序列執行,避免了前面說的幻讀的問題。seralizable會在讀取的每一行資料上都加鎖,所以會導致大量的超時和鎖爭用的問題。實力應用中也很少用到這個級別。只有在非常確保資料的一致性和可以接受沒有併發的情況下,才考慮採用該級別。 

MySQL事務隔離級別介紹

sql標準定義了4類隔離級別,包括了一些具體規則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。低階別的隔離級一般支援更高的併發處理,並擁有更低的系統開銷。read uncommitted 讀取未提交內容 在該隔離級別,所有事務都可以看到其他未提交事務的執行結果。本隔離級別很少用於實際應用,因...

高效能mysql的事物隔離級別

資料庫事務的隔離級別有4種,由低到高分別為read uncommitted read committed repeatable read serializable 而且,在事務的併發操作中可能會出現髒讀,不可重複讀,幻讀。下面通過事例一一闡述它們的概念與聯絡。read uncommitted 讀未提...

mysql事務隔離級別介紹和個人看法

在read uncommitted級別,事務中的修改,即使沒有提交,對其他的事務也是可見的.事務可以讀取未提交的資料,這也被稱為髒讀 dirty read 這個級別會導致很多的問題,從效能上來說,read uncommitted不會比其他的級別好很多,但缺乏其他級別的好處,除非真的非常必要的理由,在...