mysql 詳解隔離級(jí)別操作過程(cmd)
讀未提交示例操作過程-Read uncommitted
1、打開兩個(gè)MySql的命令提示行,均進(jìn)入相同數(shù)據(jù)庫,并檢查當(dāng)前表內(nèi)容為相同數(shù)據(jù)如下:

2、在A、B兩端執(zhí)行select @@tx_isolation;檢查當(dāng)前默認(rèn)的隔離級(jí)別別,可以發(fā)現(xiàn)都是
Repeatable Read –可重復(fù)讀-(在當(dāng)前事務(wù)內(nèi),重復(fù)讀取第一次讀取過的數(shù)據(jù)就叫可重復(fù)讀。)

3、修改A端的隔離級(jí)別為readuncommitted –讀未提交。意思是可以讀取別人沒有提交的數(shù)據(jù)。
set transactionisolation level read uncommitted;
在綠色的MySql5.5上請(qǐng)執(zhí)行:
Set sessiontransaction isolation level read uncommitted;
然后再查看是否已經(jīng)發(fā)生改變:

4、在A、B兩端都開啟事務(wù)
starttransaction;
5、在B端修改一行數(shù)據(jù)如:
update stud setname='Jhon' where id=1;
其后在A端執(zhí)行查詢:select * from stud;

6、此時(shí)B端再次執(zhí)行回滾操作
Rollback;
再在A端進(jìn)行查詢,結(jié)果發(fā)現(xiàn)數(shù)據(jù)又回到了之前的數(shù)據(jù)。這就是臟讀:

7、對(duì)于B端寫入的新數(shù)據(jù),如果沒有提交A端也一樣能查詢到,這叫幻讀。

讀已提交操作過程:-read COMMITTED
1、 檢查A、B兩端是否一致:

2、修改A端(左)的隔離級(jí)別為readcommitted;
set transactionisolation level read committed;
在A端開啟事務(wù):
starttransaction;
在B端開啟事務(wù)

3、在A端進(jìn)行查詢:
Select * fromstud;
在B端修改一行記錄并提交
Update stud setname='itcast' where id=1;
再回到A端進(jìn)行查詢,發(fā)現(xiàn)在同一個(gè)事務(wù)內(nèi),兩次查詢的結(jié)果不一樣:

可重復(fù)讀示例Repeatable Read
1、查看A端的隔離級(jí)別是否為Repeatableread級(jí)別:
Select@@tx_isolation;
2、先在A端在開啟的事務(wù)內(nèi)進(jìn)行查詢。
然后在B端修改數(shù)據(jù)庫的內(nèi)容。
最后再在A端的同一事務(wù)內(nèi)進(jìn)行查詢,發(fā)現(xiàn)結(jié)果一致。

Serializable是最高級(jí)的隔離級(jí)別
1、在A端設(shè)置隔離級(jí)別為Serializable
set transactionisolation level serializable;
在A端開啟一個(gè)事務(wù)-并對(duì)stud表進(jìn)行查詢。
在B端開啟一個(gè)事務(wù),并寫入一行記錄。此時(shí)發(fā)現(xiàn)B的代碼并沒有執(zhí)行,因?yàn)樗诘華提交之后它才執(zhí)行。
類似于線程同步的概念

這四種隔離級(jí)別采取不同的鎖類型來實(shí)現(xiàn),若讀取的是同一個(gè)數(shù)據(jù)的話,就容易發(fā)生問題。例如:
臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù),由于某些原因,前一個(gè)RollBack(回滾)了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會(huì)是不正確的。
不可重復(fù)讀(Non-repeatable read):在一個(gè)事務(wù)的兩次查詢之中數(shù)據(jù)不一致,這可能是兩次查詢過程中間插入了一個(gè)事務(wù)更新的原有的數(shù)據(jù)。
幻讀(Phantom Read):在一個(gè)事務(wù)的兩次查詢中數(shù)據(jù)筆數(shù)不一致,例如有一個(gè)事務(wù)查詢了幾列(Row)數(shù)據(jù),而另一個(gè)事務(wù)卻在此時(shí)插入了新的幾列數(shù)據(jù),先前的事務(wù)在接下來的查詢中,就會(huì)發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
MySQL如何運(yùn)行sql文件圖文詳解(以Navicat做演示)
Navicat是MySQL非常好用的可視化管理工具,功能非常強(qiáng)大,能滿足我們?nèi)粘?shù)據(jù)庫開發(fā)的所有需求,這篇文章主要給大家介紹了關(guān)于MySQL如何運(yùn)行sql文件(以Navicat做演示)的相關(guān)資料,需要的朋友可以參考下2024-08-08
mysql exists與not exists實(shí)例詳解
這篇文章主要介紹了mysql exists與not exists實(shí)例詳解的相關(guān)資料,鑒于 not exists 的效率往往要高于 not in , 所以一般情況下會(huì)使用前者替代后者,需要的朋友可以參考下2017-07-07
MySQL數(shù)據(jù)庫innodb啟動(dòng)失敗無法重啟的解決方法
這篇文章給大家分享了MySQL數(shù)據(jù)庫innodb啟動(dòng)失敗無法重啟的解決方法,通過總結(jié)自己遇到的問題分享給大家,讓遇到同樣問題的朋友們可以盡快解決,下面來一起看看吧。2016-09-09
手把手教你使用Navicat查詢表的詳細(xì)結(jié)構(gòu)
在使用Navicat時(shí),我們可以通過執(zhí)行一些SQL語句來查看表結(jié)構(gòu),下面這篇文章主要給大家介紹了關(guān)于如何使用Navicat查詢表的詳細(xì)結(jié)構(gòu),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
解決bash: mysql: command not found 的方法
解決bash: mysql: command not found 的方法,需要的朋友可以參考一下2013-03-03
Mysql 存在多條數(shù)據(jù)時(shí)如何按時(shí)間取最新的那一組數(shù)據(jù)(思路詳解)
這篇文章主要介紹了Mysql 存在多條數(shù)據(jù)時(shí)如何按時(shí)間取最新的那一組數(shù)據(jù),本文給大家分享兩種思路結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
mysql搭建主從復(fù)制的實(shí)現(xiàn)步驟
在MySQL集群中,主庫更新會(huì)同步到從庫,但從庫更新不同步到主庫,主從復(fù)制能分?jǐn)倝毫?本文就來介紹一下mysql搭建主從復(fù)制的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-11-11
MySql 8.0.11 安裝過程及 Navicat 鏈接時(shí)遇到的問題小結(jié)
這篇文章主要介紹了MySql 8.0.11 安裝過程及 Navicat 鏈接時(shí)遇到的問題,需要的朋友可以參考下2018-06-06
詳解MySQL與Spring的自動(dòng)提交(autocommit)
這篇文章主要介紹了MySQL與Spring的自動(dòng)提交(autocommit)的的相關(guān)資料,幫助大家更好的理解和使用MySQL與spring,感興趣的朋友可以了解下2021-01-01

