最簡短最直白的解釋:臟讀、不可重復讀、幻讀,以及四種隔離級別的含義

導讀
一條事務由、開始事務、執行事務(增刪改查操作)、提交事務或回滾,三個步驟組成。
級別:讀未提交
其他事務修改字段后 - 提交事務前,此期間,當前事務能讀到,該字段修改后未提交的值 ,所以叫讀未提交,由此會產生臟讀問題。
問題:臟讀
1.A字段 值為 1
2.事務A 修改 A字段 為 2
3.事務B 讀取 A字段 得到 2
4.事務A 回滾 A字段 恢復為 1
5.事務B 再取 A字段 得到 1
案例中 事務B 讀 A字段 兩次的值不一樣,原因是被 事務A 的回滾污染了,所以叫臟讀。
級別:讀已提交
此級別下,當前事務不會查詢到,其他事務修改未提交的值,所以叫讀已提交,由此解決臟讀問題,但還存在不可重復讀問題。
問題:不可重復讀
1.A字段 值為 1
2.事務B 修改 A字段 為 2 提交
3.事務A 讀取 A字段 得到 2
4.事務C 修改 A字段 為 1 提交
5.事務A 再取 A字段 得到 1
案例中 事務A 讀 A字段 兩次的值不一樣,原因是過程中 事務B、事務C 修改了值,
事務A 重復讀同一字段,得到的值不同,所以叫不可重復讀。
級別:可重復讀
此級別下,當前事務重復讀某字段,結果相同,不受其他事務修改影響,所以叫可重復讀,由此解決不可重復讀問題,但還存在幻讀問題。
問題:幻讀
1.A表 有 5 條數據
2.事務A 讀取 A表 得到 5 條數據
3.事務B 向 A表 插入 1 條數據 并提交
4.事務A 再讀 A表 得到 6 條數據
案例中 事務A 讀 A表 兩次得到的數據條數不一樣,原因是過程中 事務B 插入了新數據,
因為受到其他事務增刪行為影響,當前事務的同一條SQL語句兩次查詢的記錄數不一樣,就叫幻讀。
級別:串行化
此級別能解決以上所有問題。
浙公網安備 33010602011771號