事務a 讀取事務b更新的資料, 然後事務b回滾,那麼a讀取到的資料就是髒資料:
情景展示:
1. 會話b 可提交讀
set session transaction2. 會話a 讀取表資料isolation
level
read
uncommitted
begin
update account set balance = balance -
50where id =
1
3. 此時會話a看到 id = 1的 balance = 350, 想要執行更新操作,350 - 50 =300
update account set balance = balance - 50 where id = 14. 在執行之前, 會話b 執行rollback 回滾了
5.然後結果並沒有改變
1. 新建乙個會話,會話設定為 read committed 已提交讀,然後開啟乙個事務
執行更新語句:
update account set balance = balance - 50 where id = 1
2.新建乙個會話,設定為已提交讀,然後開啟事務,查詢表資料
set session transaction isolation level read committed
begin
select * from account
讀取到的資料仍然是400
原始資料
1.開啟乙個會話, 設定會話級別,可重複讀,然後開啟事務,更新操作
set session transaction isolation level repeatable read
begin
update account set balance = balance - 50 where id = 1
2.開啟另乙個會話,設定會話級別,可重複讀,然後開啟事務,執行查詢操作
set session transaction isolation level repeatable read
begin
select * from account
3.會話1 提交事務 commit, 然後會話1查詢資料展示:
4.會話2 查詢資料展示:
事務的隔離性
例如 統計定單系統中事務活動 如下 1.事務t1列印定單表中的記錄 2.t2向定單表插入了新的定單,t2提交 3.事務t1統計定單表中的的記錄總數,t1提交 因為事務t2在t1結束前向定單表中插入了新的記錄,導致事務t1列印的定單記錄數量和t1統計的定單數量不一致.產生併發異常問題的主要原因是併發操...
Mysql 事務隔離性
事務併發所引起的跟讀取資料有關的問題,各用一句話來描述一下 1.髒讀 事務 a 讀取了事務 b 未提交的資料,並在這個基礎上又做了其他操作。讀取未提交 2.不可重複讀 事務 a 讀取了事務 b 已提交的更改資料。讀取新提交update 3.幻讀 事務 a 受到事務 b 已提交的新增資料影響。看不到已...
事務的隔離性
事務有四大特性 原子性 一致性 隔離性 永續性。其中事務的隔離比較重要,事務隔離性處理在資料併發量較大的系統顯得比較重要。資料庫在事務隔離這塊提供了四種事務隔離級別,分別是 讀取未提交內容 read uncommitted 讀取已提交內容 read committed 可重讀 repeatable ...