臟讀:對于兩個事物 T1、T2,T1 讀取了已經(jīng)被 T2 更新但還沒有被提交的字段.。之后, 若 T2 回滾,T1讀取的內(nèi)容就是臨時且無效的。
不可重復(fù)讀:對于兩個事物 T1、T2,T1 讀取了一個字段,然后 T2 更新了該字段。之后,T1再次讀取同一個字段,值就不同了。
幻讀:對于兩個事物 T1、T2,T1 從一個表中讀取了一個字段,然后 T2 在該表中插入了一些新的行。之后,如果 T1 再次讀取同一個表,就會多出幾行.
數(shù)據(jù)庫系統(tǒng)必須具有隔離并發(fā)運行各個事務(wù)的能力,使它們不會相互影響,避免各種并發(fā)問題。一個事務(wù)與其他事務(wù)隔離的程度稱為隔離級別。數(shù)據(jù)庫規(guī)定了多種事務(wù)隔離級別,不同隔離級別對應(yīng)不同的干擾程度,隔離級別越高,數(shù)據(jù)一致性就越好,但并發(fā)性越弱。
查看當(dāng)前mysql數(shù)據(jù)庫的隔離級別:
設(shè)置mysql數(shù)據(jù)庫禁止自動提交(默認為1):
以下操作都是在test數(shù)據(jù)庫isolation表中進行:
1、設(shè)置數(shù)據(jù)庫的隔離級別為read uncommitted:
2、開啟兩個事務(wù)T1、T2:
T1:
T2:
3、在T2中修改id=00002的name=guanyunchang,不提交在T1中查詢:
T2:
T1:
出現(xiàn)了臟讀問題。
4、T2回滾:
T2:
T1:
1、設(shè)置數(shù)據(jù)庫隔離級別為read committed:
2、開啟兩個事務(wù)T1、T2:
T1:
T2:
3、在T2中修改id=00002的name=guanyunchang,不提交在T1中查詢:
T2:
T1:
臟讀問題不存在。
4、T2提交:
T2:
T1:
出現(xiàn)了不可重復(fù)讀問題。
1、設(shè)置數(shù)據(jù)庫隔離級別為repeatable read:
2、開啟兩個事務(wù)T1、T2:
T1:
T2:
3、在T2中修改id=00002的name=guanyunchang
T2不提交,在T1中查詢:
臟讀問題不存在。
T2提交,在T1中查詢:
不可重復(fù)度問題不存在。
4、在T2中插入一條數(shù)據(jù)id=00004、name=zhugeliang并提交
T2:
T1:
出現(xiàn)幻讀問題。
1、設(shè)置數(shù)據(jù)庫隔離級別為serializable:
2、開啟兩個事務(wù)T1、T2:
T1:
T2:
3、在T2中修改id=00003的name=zhangyide:
在事務(wù)T1持續(xù)期間,不允許T2插入、修改、刪除操作。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com