開門見山
可重復(fù)讀僅能保證再次執(zhí)行同樣的查詢時舌劳,先前返回【過】的結(jié)果一定跟之前一樣留特,而不保證會不會多出別的記錄。如果返回了之前沒有出現(xiàn)過的記錄亿傅,就是幻讀。
隔離級別
數(shù)據(jù)庫事務(wù)的四種隔離級別相信現(xiàn)在已經(jīng)爛大街了瘟栖,但是發(fā)現(xiàn)很多文章都沒有解釋清楚不可重復(fù)讀non-repeatable read
與幻讀phantom
的區(qū)別葵擎,所以這里總結(jié)明確一下。
-
讀未提交(Read Uncommitted)
這個非常好理解慢宗,就是在一個事務(wù)中可以讀到其他事務(wù)還沒有提交的中間值坪蚁,相當于沒有隔離。
-
提已提交(Read Committed)
相對于上一條而言镜沽,此級別在一個事務(wù)中只允許讀到其他事務(wù)已經(jīng)提交過的值敏晤,看不到其他事務(wù)的中間值。但這樣也有問題缅茉,就是在同事務(wù)中前后兩次select有可能會返回不同的結(jié)果嘴脾,即第一次select以后,如果中間有其他事務(wù)提交了對相關(guān)數(shù)據(jù)的修改,那么第二次select就會看到新的值译打,與第一次select不一致耗拓。術(shù)語"不可重復(fù)讀"指的就是這種情況,重復(fù)讀即多次select, 不可重復(fù)讀就是多次select的結(jié)果可能是不一樣的奏司。
-
可重復(fù)讀(Repeatable Read)
容易混淆的地方就在這了乔询。可重復(fù)讀這一級別保證了在同一個事務(wù)中韵洋,第一次select到的數(shù)據(jù)竿刁,在后續(xù)select中仍然保持不變。重點在于搪缨,它保證的是對于第一次讀到的數(shù)據(jù)食拜,后續(xù)再對這些數(shù)據(jù)的讀操作會返回相同的結(jié)果。它的問題在于范圍查詢副编。比如第一次讀到了A, B兩條記錄负甸,那么可重復(fù)讀僅能保證再執(zhí)行同樣的查詢時,返回的A, B記錄跟之前的一樣痹届,而不保證其他記錄呻待。這里的其他記錄是指在兩次查詢之間有其他事務(wù)在中間插入了新記錄,這些新記錄剛好與你的where條件匹配短纵,這樣一來雖然第二次查詢也返回了跟之前一樣的A, B带污,但可能會多了C, D, E等新記錄,這就叫幻讀香到。
-
串行化
沒啥好說的鱼冀。