MySQL隔離級別

隔離級別是針對數(shù)據(jù)庫 ACID 中的I(隔離性)來說的

  • 原子性
  • 一致性
  • 隔離性
  • 持久性

隔離性

通常來說,一個事務所做的修改,在最終提交以前,對其他事務是不可見的,為什么是 “通常來說”,因為這種特性和隔離級別有關(guān)

未提交讀 READ UNCOMMITTED

事務中的修改,即使沒有提交,其他事務也可以讀到。被稱為臟讀
從性能上來說,并沒有比其他級別好太多,卻有很多問題,一般很少使用。

讀提交:

事務A事先讀取了數(shù)據(jù),事務B緊接了更新了數(shù)據(jù),并提交了事務,而事務A再次讀取該數(shù)據(jù)時,數(shù)據(jù)已經(jīng)發(fā)生了改變。造成了不可重復讀(虛讀)。

可重復讀:

事務A讀取與搜索條件相匹配的若干行。事務B以插入或刪除行等方式來修改事務A的結(jié)果集,然后再提交。事務A再讀取時,卻發(fā)現(xiàn)數(shù)據(jù)發(fā)生了變化。造成了幻讀。

不可重復讀真正含義應該包含虛讀和幻讀。

所謂的虛讀,也就是大家經(jīng)常說的不可重復讀,是指在數(shù)據(jù)庫訪問中,一個事務范圍內(nèi)兩個相同的查詢卻返回了不同數(shù)據(jù)。這是由于查詢時系統(tǒng)中其他事務修改的提交而引起的。比如事務T1讀取某一數(shù)據(jù),事務T2讀取并修改了該數(shù)據(jù),T1為了對讀取值進行檢驗而再次讀取該數(shù)據(jù),便得到了不同的結(jié)果。

一種更易理解的說法是:在一個事務內(nèi),多次讀同一個數(shù)據(jù)。在這個事務還沒有結(jié)束時,另一個事務也訪問該同一數(shù)據(jù)。那么,在第一個事務的兩次讀數(shù)據(jù)之間。由于第二個事務的修改,那么第一個事務讀到的數(shù)據(jù)可能不一樣,這樣就發(fā)生了在一個事務內(nèi)兩次讀到的數(shù)據(jù)是不一樣的,因此稱為不可重復讀,即原始讀取不可重復。

所謂幻讀,是指事務A讀取與搜索條件相匹配的若干行。事務B以插入或刪除行等方式來修改事務A的結(jié)果集,然后再提交。
幻讀是指當事務不是獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如第一個事務對一個表中的數(shù)據(jù)進行了修改,比如這種修改涉及到表中的“全部數(shù)據(jù)行”。同時,第二個事務也修改這個表中的數(shù)據(jù),這種修改是向表中插入“一行新數(shù)據(jù)”。那么,以后就會發(fā)生操作第一個事務的用戶發(fā)現(xiàn)表中還有沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣.一般解決幻讀的方法是增加范圍鎖RangeS,鎖定檢鎖范圍為只讀,這樣就避免了幻讀。

簡單來說,幻讀是由插入或者刪除引起的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 前言 說道數(shù)據(jù)庫就避免不了兩個內(nèi)容,索引與隔離級別。以下內(nèi)容為兩篇介紹這個內(nèi)容比較好的文章:美團點評團隊:Inno...
    淡淡的橙子閱讀 485評論 0 0
  • 前些天發(fā)現(xiàn)了一個巨牛的人工智能學習網(wǎng)站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到網(wǎng)站。[https:/...
    碼猿筆記閱讀 315評論 0 0
  • MySQL的四種隔離級別 READ UNCOMMITTED(未提交讀) 事務中的修改即使沒有提交,對其他事務也都是...
    雁陣驚寒_zhn閱讀 366評論 1 3
  • MySQL 事務的四大特性,其中事務的隔離性就是指當多個事務同時運行時,各事務之間相互隔離,不可互相干擾。如...
    WT_菜雞路閱讀 153評論 0 0
  • 在并發(fā)環(huán)境下,mysql存在臟讀、不可重復讀、幻讀等數(shù)據(jù)一致性問題。 臟讀 事務1讀到了事務2未提交的修改,也就是...
    修行者12138閱讀 313評論 0 0

友情鏈接更多精彩內(nèi)容