事務隔離性

2022-03-12 18:18:09 字數 1909 閱讀 2045

事務a 讀取事務b更新的資料, 然後事務b回滾,那麼a讀取到的資料就是髒資料:

情景展示:

1. 會話b 可提交讀

set session transaction

isolation

level

read

uncommitted

begin

update account set balance = balance -

50where id =

1

2. 會話a 讀取表資料

3. 此時會話a看到 id = 1的 balance = 350, 想要執行更新操作,350 - 50 =300

update account set balance = balance - 50 where id = 1
4. 在執行之前, 會話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 ...