讀已提交和可重復讀的區別 命令行測試


可重復讀:兩個事務進行數據操作他們是互不干擾的 ,事務先A進行數據查詢,事務B進行一次事務修改並進行數據提交,事務A再進行一次查詢,數據是不改變的。

讀已提交:兩個事務進行數據操作,事務先A進行數據查詢,事務B進行一次事務修改並進行數據提交,事務A再進行一次查詢,數據是B修改后的數據。

 

// 涉及到的幾個命令

mysql -uroot -p123456
use mydemo
select @@global.transaction_isolation,@@transaction_isolation;  (查看全局/會話隔離級別)

SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;(設置隔離級別為 可重復讀)

SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;(設置隔離級別為 讀已提交)

SHOW VARIABLES LIKE 'autocommit'; (查看是否自動提交)
set @@autocommit=0; (設置手動提交)
START transaction ;  (開啟事務)
commit;  (事務提交)

 

 

1.登陸數據庫查看數據

 

2.查看全局/會話隔離級別(mysql默認就是可重復讀,不用做修改)

 

 

 

3.查看是否是自動提交,並設置為手動提交   設置autocommit為on;(ON、OFF、1、0)都可以

 

 

 

-- --   開啟另外一個窗口  做上述相同操作  ----

    正式開始測試   可重復讀

事務先A進行數據查詢,事務B進行一次數據修改,事務A再次查詢數據  數據不變,事務B進行數據提交,事務A再進行一次查詢,數據是不改變的。

1 .兩個窗口都開啟事務

 

 

 

2.窗口A進行一次數據查詢

 

 

 

3.窗口B做一個數據的刪除,並查詢一個數據(這里查詢的數據是刪除成功的,因為在同一個事務)

 

 

 

4.窗口A再次查詢數據  (數據是不變的)

 

 

 

5. 窗口B提交事務

 

 

 6. 窗口A再次查詢 (數據還是不變的)

 

 7. 窗口A提交

 

 

8.窗口A提交之后再次查詢 數據是B修改后的

 

 

    正式開始測試   讀已提交

 

事務先A進行數據查詢,事務B進行一次事務修改,事務A再次查詢數據  數據不變,事務B進行數據提交,事務A再進行一次查詢,數據是改變的。

1.事務A和事務B都要要做的操作

 

 

2.事務A查詢數據

 

 3.事務B進行一次數據刪除 並查詢數據

 

 

 4. 事務A再次查詢數據  數據跟第一次相比不變

 

 

5 .事務B提交數據

 

 

 

6.事務A再次查詢數據  發現事務B刪除的數據不在了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM