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...