1. 程式人生 > >Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀)

Hibernate中的事務隔離問題(臟讀、不可重復讀、幻讀)

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中的事務隔離問題(臟讀、不可重復讀、幻讀)