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