讀未提交示例操作過程-Read uncommitted
1、打開兩個MySql的命令提示行,均進入相同數據庫,并檢查當前表內容為相同數據如下:

2、在A、B兩端執行select @@tx_isolation;檢查當前默認的隔離級別別,可以發現都是
Repeatable Read –可重復讀-(在當前事務內,重復讀取第一次讀取過的數據就叫可重復讀。)

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

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

6、此時B端再次執行回滾操作
Rollback;
再在A端進行查詢,結果發現數據又回到了之前的數據。這就是臟讀:

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

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

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

3、在A端進行查詢:
| Select * fromstud; | 
在B端修改一行記錄并提交
| Update stud setname='itcast' where id=1; | 
再回到A端進行查詢,發現在同一個事務內,兩次查詢的結果不一樣:

可重復讀示例Repeatable Read
1、查看A端的隔離級別是否為Repeatableread級別:
Select@@tx_isolation;
2、先在A端在開啟的事務內進行查詢。
然后在B端修改數據庫的內容。
新聞熱點
疑難解答