事物的隔離級別

2021-09-10 19:25:40 字數 1010 閱讀 5772

髒讀:當前事務讀到的資料是別的事務想要提交的但是沒有提交成功的資料,換一種描述即讀取到了別的事物回滾撤銷前的資料。

如事務a執行過程中修改了資料c,提交前,事務b讀取了資料c,此時事務a回滾了,這樣事務b就變成了髒讀。

不可重複讀:同一事務多次讀取同一條資料,發現資料變更(可能是別的事物修改了),就是所謂的不可重複讀。

事務a首先根據條件索引得到n條資料,然後事務b改變了這n條資料之外的m條或者增添了m條符合事務a搜尋條件的資料,導致事務a再次搜尋發現有n+m條資料了,就產生了幻讀。

不可重複讀和幻讀比較:

兩者有些相似,但是前者針對的是update或delete,後者針對的insert。

spring中使用了註解進行標識對應的隔離級別   isolation= isolation.read_committed

@override

@transactional(isolation= isolation.read_committed, propagation = propagation.required)

public role getrole(long id)

對應的隔離級別有:

spring(資料庫)事務隔離級別分為四種(級別遞減):

1、serializable (序列化):最嚴格的級別,事務序列執行,資源消耗最大;

2、repeatable read(重複讀) :保證了乙個事務不會修改已經由另乙個事務讀取但未提交(回滾)的資料。避免了「髒讀取」和「不可重複讀取」的情況,但不能避免「幻讀」,但是帶來了更多的效能損失。

3、read committed (提交讀):大多數主流資料庫的預設事務等級,保證了乙個事務不會讀到另乙個並行事務已修改但未提交的資料,避免了「髒讀取」,但不能避免「幻讀」和「不可重複讀取」。該級別適用於大多數系統。

4、read uncommitted(未提交讀) :事務中的修改,即使沒有提交,其他事務也可以看得到,會導致「髒讀」、「幻讀」和「不可重複讀取」。

參考: 通俗地解釋髒讀、不可重複讀、幻讀

事物隔離級別

自然也是支援四種事務隔離級別的 read uncommitted,read commit,repeatable read serializable,下面就分別最四種隔離級別在實現的鎖機制做乙個簡介 serializable 1 這種隔離級別對資料的要求最為嚴格,自然也是效能最差的一種隔離級別。在所有...

事物隔離級別

隔離級別從松到緊 讀未提交,讀提交 重複讀,序列化。讀未提交 可能會出現髒讀的情況 例子 你去買5個包子。人多。店員拿的急多方乙個,袋子裡有6個,這個時候,你眼睛一瞟。心裡美滋滋。付錢的時候老闆檢查了一下,發現多了乙個,就拿走了乙個,然後你付錢走人 提交事務 這時候你就發現實際上袋子裡只有5個,但是...

事物隔離級別

在分布式的系統中,通常會有多個執行緒連線到資料庫中同時對乙個表進行操作 這裡的同時並不表示同乙個時間點,而是同時競爭cpu的資源,至於如何排程,就要看執行緒和作業系統如何進行排程了 這種情況下如果會話的事物設定不當,就會導致資料混亂,常常會出現以下三種情況 假設現在系統中有兩個會話a和b,同時對錶t...