Read uncommitted(讀未提交)
該隔離級別下,所有事務都可以讀取到其他事務中沒有提交的處理結果惑折。很少用于實際應用艾君,因為不能保證數(shù)據(jù)的一致性。
Read committed(讀已提交)
大多數(shù)數(shù)據(jù)庫采用的默認隔離級別产艾,mysql 不是。讀已提交隔離級別下滑绒,事務只能看到其他事務已經(jīng)提交的數(shù)據(jù)闷堡。如果同一事務的其他實例在該實例處理其間可能會有新的commit,那么同一select可能返回不同結果疑故。
Repeated read(可重復讀)
這是MySQL的默認事務隔離級別杠览,它確保同一事務的多個實例在并發(fā)讀取數(shù)據(jù)時,會看到同樣的數(shù)據(jù)行焰扳。不過理論上倦零,這會導致另一個棘手的問題:幻讀 (Phantom Read)。簡單的說吨悍,幻讀指當用戶讀取某一范圍的數(shù)據(jù)行時扫茅,另一個事務又在該范圍內(nèi)插入了新行,當用戶再讀取該范圍的數(shù)據(jù)行時育瓜,會發(fā)現(xiàn)有新的“幻影” 行葫隙。InnoDB和Falcon存儲引擎通過多版本并發(fā)控制(MVCC,Multiversion Concurrency Control)機制解決了該問題躏仇。
Serializable(串行化)
這是最高的隔離級別恋脚,它通過強制事務排序腺办,使之不可能相互沖突,從而解決幻讀問題糟描。簡言之怀喉,它是在每個讀的數(shù)據(jù)行上加上共享鎖。在這個級別船响,可能導致大量的超時現(xiàn)象和鎖競爭躬拢。