《Mysql應(yīng)用mysql 詳解隔離級別操作過程(cmd)》要點(diǎn):
本文介紹了Mysql應(yīng)用mysql 詳解隔離級別操作過程(cmd),希望對您有用。如果有疑問,可以聯(lián)系我們。
MYSQL學(xué)習(xí)讀未提交示例操作過程-Read uncommitted
MYSQL學(xué)習(xí)1、打開兩個(gè)MySql的命令提示行,均進(jìn)入相同數(shù)據(jù)庫,并檢查當(dāng)前表內(nèi)容為相同數(shù)據(jù)如下:
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)2、在A、B兩端執(zhí)行select @@tx_isolation;檢查當(dāng)前默認(rèn)的隔離級別別,可以發(fā)現(xiàn)都是
MYSQL學(xué)習(xí)Repeatable Read C可重復(fù)讀-(在當(dāng)前事務(wù)內(nèi),重復(fù)讀取第一次讀取過的數(shù)據(jù)就叫可重復(fù)讀.)
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)3、修改A端的隔離級別為readuncommitted C讀未提交.意思是可以讀取別人沒有提交的數(shù)據(jù).
MYSQL學(xué)習(xí)
set transactionisolation level read uncommitted;
MYSQL學(xué)習(xí)在綠色的MySql5.5上請執(zhí)行:
MYSQL學(xué)習(xí)
Set sessiontransaction isolation level read uncommitted;
MYSQL學(xué)習(xí)?? 然后再查看是否已經(jīng)發(fā)生改變:
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)4、在A、B兩端都開啟事務(wù)
MYSQL學(xué)習(xí)
starttransaction;
MYSQL學(xué)習(xí)5、在B端修改一行數(shù)據(jù)如:
MYSQL學(xué)習(xí)
update stud setname='Jhon' where id=1;
MYSQL學(xué)習(xí)?? 其后在A端執(zhí)行查詢:select * from stud;
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)6、此時(shí)B端再次執(zhí)行回滾操作
MYSQL學(xué)習(xí)Rollback;
MYSQL學(xué)習(xí)?? 再在A端進(jìn)行查詢,結(jié)果發(fā)現(xiàn)數(shù)據(jù)又回到了之前的數(shù)據(jù).這就是臟讀:
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)7、對于B端寫入的新數(shù)據(jù),如果沒有提交A端也一樣能查詢到,這叫幻讀.
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)?讀已提交操作過程:-read COMMITTED
MYSQL學(xué)習(xí)1、 檢查A、B兩端是否一致:
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)2、修改A端(左)的隔離級別為readcommitted;
MYSQL學(xué)習(xí)
set transactionisolation level read committed;
MYSQL學(xué)習(xí)?? 在A端開啟事務(wù):
MYSQL學(xué)習(xí)?? starttransaction;
MYSQL學(xué)習(xí)?? 在B端開啟事務(wù)
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)3、在A端進(jìn)行查詢:
MYSQL學(xué)習(xí)
Select * fromstud;
MYSQL學(xué)習(xí)在B端修改一行記錄并提交
MYSQL學(xué)習(xí)
Update stud setname='itcast' where id=1;
MYSQL學(xué)習(xí)再回到A端進(jìn)行查詢,發(fā)現(xiàn)在同一個(gè)事務(wù)內(nèi),兩次查詢的結(jié)果不一樣:
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)?可重復(fù)讀示例Repeatable Read
MYSQL學(xué)習(xí)1、查看A端的隔離級別是否為Repeatableread級別:
MYSQL學(xué)習(xí)Select@@tx_isolation;
MYSQL學(xué)習(xí)2、先在A端在開啟的事務(wù)內(nèi)進(jìn)行查詢.
MYSQL學(xué)習(xí)然后在B端修改數(shù)據(jù)庫的內(nèi)容.
MYSQL學(xué)習(xí)最后再在A端的同一事務(wù)內(nèi)進(jìn)行查詢,發(fā)現(xiàn)結(jié)果一致.
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)?Serializable是最高級的隔離級別
MYSQL學(xué)習(xí)1、在A端設(shè)置隔離級別為Serializable
MYSQL學(xué)習(xí)
set transactionisolation level serializable;
MYSQL學(xué)習(xí)在A端開啟一個(gè)事務(wù)-并對stud表進(jìn)行查詢.
MYSQL學(xué)習(xí)在B端開啟一個(gè)事務(wù),并寫入一行記錄.此時(shí)發(fā)現(xiàn)B的代碼并沒有執(zhí)行,因?yàn)樗诘華提交之后它才執(zhí)行.
MYSQL學(xué)習(xí)類似于線程同步的概念
MYSQL學(xué)習(xí)
MYSQL學(xué)習(xí)?這四種隔離級別采取不同的鎖類型來實(shí)現(xiàn),若讀取的是同一個(gè)數(shù)據(jù)的話,就容易發(fā)生問題.例如:
MYSQL學(xué)習(xí)臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù),由于某些原因,前一個(gè)RollBack(回滾)了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會是不正確的.
MYSQL學(xué)習(xí)不可重復(fù)讀(Non-repeatable read):在一個(gè)事務(wù)的兩次查詢之中數(shù)據(jù)不一致,這可能是兩次查詢過程中間插入了一個(gè)事務(wù)更新的原有的數(shù)據(jù).
MYSQL學(xué)習(xí)幻讀(Phantom Read):在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致,例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù),而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的
MYSQL學(xué)習(xí)?感謝閱讀,希望能贊助到大家,謝謝大家對本站的支持!
《Mysql應(yīng)用mysql 詳解隔離級別操作過程(cmd)》是否對您有啟發(fā),歡迎查看更多與《Mysql應(yīng)用mysql 詳解隔離級別操作過程(cmd)》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/10490.html