可重復讀:兩個事務進行數據操作他們是互不干擾的 ,事務先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刪除的數據不在了