1.(read uncommitted)
讀到事務(wù)未提交數(shù)據(jù) : 假設(shè)用戶A與用戶B,用戶 A 開啟一個事務(wù), account + 200, A 事務(wù)還未 commit 用戶B 就可以看到 account+ 200 的結(jié)果, 這樣 在用戶B讀數(shù)據(jù)的時候,有可能讀到未提交的數(shù)據(jù),這就叫做臟讀。
2. (read committed) 大多數(shù)數(shù)據(jù)庫的默認隔離級別
只能讀到事務(wù)提交后的數(shù)據(jù): 假設(shè) 用戶 A 開啟一個事務(wù), account+ 200, 此時用戶A 的數(shù)據(jù)還未提交,B讀到的數(shù)據(jù)依舊不會改變,只有等 A 的事務(wù) commit 后,B才可以讀到 account+200 , 這樣就會出現(xiàn)B在一個事務(wù)中可能會讀到兩次不同的數(shù)據(jù)(第一次讀的時候A事務(wù)還未提交,第二次讀的時候A事務(wù)已經(jīng)提交),這種讀到兩次不同的數(shù)據(jù)也叫不可重復(fù)讀
3. (repeatable read) mysql的默認隔離級別
同一事務(wù)內(nèi)讀到的數(shù)據(jù)一致: 事務(wù)B開啟一個事務(wù),先讀一次數(shù)據(jù),然后A在其中插入一條新數(shù)據(jù),此時B再讀一次,發(fā)現(xiàn)數(shù)據(jù)并沒有發(fā)生變化,但是當(dāng)我們插入和A剛插入的數(shù)據(jù)相同的一條數(shù)據(jù)時,就會報數(shù)據(jù)已存在, (如果我們是用戶B就會感到一臉懵逼,明明看到的數(shù)據(jù)不存在,但是插入的數(shù)據(jù)已存在,我們稱這種就為幻象讀)
4. ( serializable) :
串行化:A開啟一個事務(wù),讀數(shù)據(jù),此時還未提交,B此時要往數(shù)據(jù)庫里寫數(shù)據(jù),發(fā)現(xiàn)需要等待,當(dāng)A事務(wù)提交了,B才可以成功寫入。