隔離級別是針對數(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,鎖定檢鎖范圍為只讀,這樣就避免了幻讀。
簡單來說,幻讀是由插入或者刪除引起的。