Spring中事務五種隔離級別

2022-09-16 12:39:12 字數 1305 閱讀 2732

isolation 屬性一共支援五種事務設定:

1、default 使用資料庫設定的隔離級別 (預設) ,由 dba 預設的設定來決定隔離級別 .

2、read_uncommitted 會出現髒讀、不可重複讀、幻讀 (隔離級別最低,併發效能高)

3、read_committed 會出現不可重複讀、幻讀問題(鎖定正在讀取的行,適合於大多數系統)

4、repeatable_read 會出現幻讀(鎖定所讀取的所有行)

5、serializable 保證所有的情況不會發生(鎖表)

三種惱人的問題:

1: dirty reads:讀髒資料。

也就是說,比如事務a的未提交(還依然快取)的資料被事務b讀走,如果事務a失敗回滾,會導致事務b所讀取的的資料是錯誤的。

2: non-repeatable reads:資料不可重複讀。

比如事務a中兩處讀取資料-price-的值。在第一讀的時候,price是100,然後事務b就把price的值改成 200;

事務a再讀一次,結果就發現,price竟然就變成200了,造成事務a資料混亂。

3: phantom reads:幻象讀資料。

這個和non-repeatable reads相似,也是同乙個事務中多次讀不一致的問題。

但是non-repeatable reads的不一致是因為他所要取的資料值被改變了(比如price);

而phantom reads所要讀的資料的不一致卻是他的條件資料集發生變化了。

比如select account.id where account.name="ppgogo*"。

第一次讀去了6個符合條件的id;第二次讀取的時候,由於事務b把乙個帳號的名字由"dd"改成"ppgogo1",結果取出來了7個資料。

換句話說,不可重複讀的重點是修改:同樣的條件,兩次讀發現值不一樣;幻讀的重點在於新增或者刪除:同樣的條件,兩次讀發現得到的記錄數不一樣。

相互關聯如下:

dirty reads

no-repeatable reads

phantom reads

serializablenn

nrepeatable readnn

yread comittedny

yread uncomittedyy

y

spring事務隔離級別

在spring中定義了5中不同的事務隔離級別 1.isolation default 一般情況下使用這種配置既可 這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別。2.isolation read uncommitted 4 p l.i f k...

Spring 事務隔離級別

資料庫事務的隔離級別有4種,由低到高分為為read uncomitted,read comitted,repeatable read serializable,而且,在事務的併發操作中可能會出現髒讀,不可重複度,虛讀 幻讀 髒讀 read uncomitted 什麼都防不住 乙個事務讀到另外乙個事務...

Spring事務隔離級別

事務操作可能出現的問題 更新丟失 lost update 當系統允許兩個事務同時更新同一資料時,發生更新丟失。髒讀 dirty read 當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。非重複讀 nonrepeatable read 第一次讀 得到乙個結果 再讀,換了乙個結果 幻像 phanto...