Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀)
阿新 • • 發佈:2017-09-12
center 錯誤 新增 str 數據庫操作 持久性 有一個 tex rep
Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀)
1.事務的特性
事務的四個特性:
1)原子性:事務是進行數據庫操作的最小單位,所以組成事務的各種操作是不可分割的
2)一致性:組成事務的各種操作,要麽全部成功,要麽全部失敗。其中有一個失敗,事務無法完成
3)隔離性:在並發中,每個事務都是獨立的
4)持久性:這是結果,表示在事務提交之後,數據將持久的保存到數據庫
2.事務的隔離問題
事務的三個隔離問題:
1)臟讀:一個事務讀到了另一個事務還沒提交的數據
如:A事務正在讀一個數據a,但是這個數據被B事務讀過,但是B事務還未提交。這就導致A事務讀到了錯誤的數據
2)不可重復讀:一個事務讀到了另一個事務已經提交的數據
如:A事務中有兩次相同的讀取數據a的操作,第一次對數據a進行了讀操作之後,B事務修改了數據a並提交,那麽在A事務第二次讀取數據a時,就得到了兩個不同的結果
3)幻讀:像發生了幻覺一樣的操作
如:A事務在對一個表中的全部數據進行修改時,B事務向表中插入了一條新的數據,當A事務提交之後,你會發現還有一條數據(就是B事務新增的數據)沒被修改。這就像發生了幻覺一樣
3.事務的隔離級別
1) Serializable (串行化):可避免臟讀、不可重復讀、幻讀
2) Repeatable read (可重復讀):可避免臟讀、不可重復讀
3) Read committed (讀已提交):可避免臟讀
4) Read uncommitted (讀未提交) :最低級別,任何情況都無法保證
Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀)