Java中JDBC進階教程之資料庫的隔離級別!
對資料庫而言,其明顯的特徵是資源可以被多個使用者共享。當相同的資料庫資源被多個使用者(多個事務)同時訪問時,如果沒有采取必要的隔離措施,就會導致各種併發問題,破壞資料的完整性。
如果不考慮隔離性,資料庫將會存在三種併發問題。
1. 髒讀
一個事務讀到了另一個事務尚未提交的更改資料。例如,事務T1修改某一資料後,事務T2讀取同一資料,然後事務T1由於某種原因被撤消,這時T1已修改過的資料恢復原值,T2讀到的資料就與資料庫中的資料不一致,其讀到的資料就為"髒"資料,對該資料的操作也無法承認。
2. 不可重複讀
不可重複讀是指一個事務讀取資料後,另一個事務執行更新操作,使第一個事務無法再現前一次的讀取結果。例如,事務T1讀取B=100進行運算,事務T2讀取同一資料B,對其進行修改後將B=200寫回資料庫。這時,T1為了對讀取值校對重讀B,B已為200,與第一次讀取值不一致。
3. 幻讀
幻讀是指一個事務讀取資料後,另一個事務執行插入操作,使第一個事務無法再現前一次的讀取結果。例如,事務T1兩次統計所有賬戶的總金額,在這期間,事務T2插入了一條新記錄,使得兩次統計的總金額不一致。
為了解決併發造成的問題,資料庫規範定義了四種隔離級別,用於限定事務之間的可見性,不同事務隔離級別能夠解決的資料併發問題的能力是不同的,具體如表2.1所示。
表2.1 資料庫的隔離級別
read uncommitted (讀未提交),一個事務讀到另一個事務沒有提交的資料。
read committed (讀已提交),一個事務讀到另一個事務已經提交的資料。
repeatable read (可重複讀),在一個事務中讀到的資料始終一致,無論別的事務是否提交。
serializable(序列化),同時只能執行一個事務,相當於是事務中的單執行緒。
以上四種隔離級別安全性最高的是serializable (序列化),最低的是read uncommitted(讀未提交),當然安全效能越高,執行效率就越低。像serializable(序列化)這樣的級別,就是以鎖表的方式,使得其他的事務只能在鎖外等待,所以平時選用何種隔離級別應該根據實際情況。MySQL資料庫預設的隔離級別為repeatable read (可重複讀)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2777275/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【進階之路】詳解資料庫事物與隔離級別資料庫
- 資料庫隔離級別資料庫
- Mysql資料庫的隔離級別MySql資料庫
- MySQL資料庫中的四種隔離級別MySql資料庫
- 資料庫的四種隔離級別資料庫
- 聊聊資料庫的事務隔離級別資料庫
- 資料庫事務與隔離級別資料庫
- [資料庫]事務的4種隔離級別資料庫
- 資料庫系列:事務的4種隔離級別資料庫
- [轉帖]資料庫的快照隔離級別(Snapshot Isolation)資料庫
- 資料庫事務與事務的隔離級別資料庫
- golang saas框架,資料庫級別隔離、讀寫分離Golang框架資料庫
- 論 MySQL 之事務隔離級別 | 資料庫篇MySql資料庫
- MySQL資料庫引擎、事務隔離級別、鎖MySql資料庫
- 陪玩系統原始碼開發,不懂資料庫隔離級別的請進原始碼資料庫
- KES資料庫實踐指南:探索KES資料庫的事務隔離級別資料庫
- SQL Server 2017 AlwaysOn輔助副本資料庫的隔離級別SQLServer資料庫
- 資料庫事務的隔離級別及四大特性資料庫
- 資料庫事務的四大特性和隔離級別資料庫
- 資料庫之事務、隔離級別和併發問題資料庫
- 資料庫隔離資料庫
- 資料庫學習筆記:事務的特性和隔離級別資料庫筆記
- 帶你真正理解MySQL資料庫的四種隔離級別!MySql資料庫
- MySQL的隔離級別MySql
- 分析資料庫的事務隔離級別在資料庫選型分析的時候很重要資料庫
- 資料庫事務的四大特性以及事務的隔離級別資料庫
- 【每日鮮蘑】資料庫隔離級別、髒讀、幻讀、鎖等資料庫
- oracle資料庫事務transaction隔離級別isolation level的選擇依據Oracle資料庫
- 資料庫事務隔離級別的深坑:預設值應修改為SERIALIZABLE資料庫
- 資料庫事務 ACID屬性、資料庫併發問題和四種隔離級別資料庫
- 資料庫事務隔離級別– 髒讀、幻讀、不可重複讀資料庫
- MySQL資料庫事務各隔離級別加鎖情況--read uncommittMySql資料庫MIT
- MySQL資料庫事務各隔離級別加鎖情況--Repeatable ReaMySql資料庫
- 檢視oracle資料庫session事務設定的是哪個隔離級別Oracle資料庫Session
- 資料庫事務併發產生的問題以及事務的隔離級別資料庫
- MySQL事務的隔離級別MySql
- Postgresql 的預設隔離級別SQL
- MySQL 的隔離級別 自理解MySql