mysql 詳解隔離級別操作過程(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)的隔離級別別,可以發(fā)現(xiàn)都是
Repeatable Read –可重復(fù)讀-(在當(dāng)前事務(wù)內(nèi),重復(fù)讀取第一次讀取過的數(shù)據(jù)就叫可重復(fù)讀。)

3、修改A端的隔離級別為readuncommitted –讀未提交。意思是可以讀取別人沒有提交的數(shù)據(jù)。
set transactionisolation level read uncommitted;
在綠色的MySql5.5上請執(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、對于B端寫入的新數(shù)據(jù),如果沒有提交A端也一樣能查詢到,這叫幻讀。

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

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

這四種隔離級別采取不同的鎖類型來實(shí)現(xiàn),若讀取的是同一個(gè)數(shù)據(jù)的話,就容易發(fā)生問題。例如:
臟讀(Drity Read):某個(gè)事務(wù)已更新一份數(shù)據(jù),另一個(gè)事務(wù)在此時(shí)讀取了同一份數(shù)據(jù),由于某些原因,前一個(gè)RollBack(回滾)了操作,則后一個(gè)事務(wù)所讀取的數(shù)據(jù)就會是不正確的。
不可重復(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ù)在接下來的查詢中,就會發(fā)現(xiàn)有幾列數(shù)據(jù)是它先前所沒有的
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- 深入理解Mysql的四種隔離級別
- MySQL中Innodb的事務(wù)隔離級別和鎖的關(guān)系的講解教程
- MySQL 四種事務(wù)隔離級別詳解及對比
- MySQL四種事務(wù)隔離級別詳解
- MySQL數(shù)據(jù)庫事務(wù)隔離級別介紹(Transaction Isolation Level)
- mysql、oracle默認(rèn)事務(wù)隔離級別的說明
- 詳解MySQL中事務(wù)隔離級別的實(shí)現(xiàn)原理
- MySQL數(shù)據(jù)庫事務(wù)隔離級別詳解
- 通過實(shí)例分析MySQL中的四種事務(wù)隔離級別
- MySQL事務(wù)的隔離級別詳情
- 如何修改mysql的隔離級別
相關(guān)文章
MySQ實(shí)現(xiàn)XA事務(wù)的具體使用
XA事務(wù)是一種分布式事務(wù)處理協(xié)議,本文主要介紹了MySQ實(shí)現(xiàn)XA事務(wù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Mysql ID生成策略的三種方法選擇及優(yōu)缺點(diǎn)
mysql ID生成策略一般常用的有三種,包括自增、UUID 以及雪花算法,本文主要介紹了Mysql ID生成策略的三種方法選擇及優(yōu)缺點(diǎn),具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06
mysql?ON?DUPLICATE?KEY?UPDATE重復(fù)插入時(shí)更新方式
這篇文章主要介紹了mysql?ON?DUPLICATE?KEY?UPDATE重復(fù)插入時(shí)更新方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
關(guān)于MySQL?onlinedb數(shù)據(jù)庫的一些查詢語句大全
這篇文章主要給大家介紹了關(guān)于MySQL?onlinedb數(shù)據(jù)庫的一些查詢語句,文中通過代碼實(shí)例介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MySQL具有一定的參考價(jià)值,需要的朋友可以參考下2023-12-12
ubuntu kylin 14.10下多個(gè)mysql 5.7.14安裝教程
這篇文章主要為大家分享了ubuntu kylin 14.10下多個(gè)mysql 5.7.14安裝教程,感興趣的朋友可以參考一下2016-08-08
MySQL IS NULL空值查詢的實(shí)現(xiàn)
MySQL 提供了?IS NULL?關(guān)鍵字,用來判斷字段的值是否為空值,本文主要介紹了MySQL IS NULL空值查詢的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
mysql如何統(tǒng)計(jì)同一字段不同值的個(gè)數(shù)
這篇文章主要介紹了mysql如何統(tǒng)計(jì)同一字段不同值的個(gè)數(shù)問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì))
這篇文章主要介紹了SQL面試題:求時(shí)間差之和(有重復(fù)不計(jì)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
MySQL 8.0.18給數(shù)據(jù)庫添加用戶和賦權(quán)問題
這篇文章主要介紹了MySQL 8.0.18給數(shù)據(jù)庫添加用戶和賦權(quán)問題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12

