髒讀
讀取了未提交的事務。
事務a讀取了事務b中尚未提交的資料。如果事務b回滾,則a讀取使用了錯誤的資料。
解決:如果乙個事務在讀的時候,禁止讀取未提交的事務。
不可重複讀
讀取了提交的新事物,指更新操作。
期望兩次讀的結果一樣,但中途另乙個事務修改了資料並提交了,導致第二次讀的結果變了。
解決:如果乙個事務在讀的時候,禁止任何事務寫。
幻讀也是讀取了提交的新事物,指增刪操作。
不可重複是針對記錄的update操作,只要在記錄上加寫鎖,就可避免;幻讀是對記錄的insert操作,禁止幻讀必須加上全域性的寫鎖。比如在表上加寫鎖。
例:
事務a,先執行:
update
table
set name=
"hky"
where id >
3 事務b,後執行,並且提交:
insert
into
table
values(11
,'uu'
) 事務a,再select一下:
select
*from
table
where id >
3 結果集:11,uu
事務a懵了,我tm剛更新完id>
3的啊?!幻覺?!
由此,也可以看出不可重複讀和幻讀區別,不可重複讀操作是本身記錄讀取產生的,幻讀則是乙個範圍。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 、read committed 、repeatable read 、serializable ,這四個級別可以逐個解決髒讀 、不可重複讀 、幻讀這幾類問題。
serializable(序列化)
最高隔離級別。所有事務操作依次順序執行。注意這會導致併發度下降,效能最差。通常會用其他併發級別加上相應的併發鎖機制來取代它。
事務 隔離級別 髒讀 不可重複 幻讀
事務,就是一組運算元據庫的動作集合。如果一組 處理步驟 全部發生或者一步也不執行,我們稱該組處理步驟為乙個事務。當所有的步驟像乙個操作一樣被完整地執行,我們稱該事務被提交。由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。二 事務的併發問題 1 髒讀 事務 a讀取了...
資料庫事務隔離級別(髒讀 幻讀 不可重複讀)
自 一 髒讀 不可重複讀 幻讀 1 髒讀 髒讀就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。例如 張三的工資為5000,事務a中把他的工資改為8000,但事務a尚未提交。與此同時,事務b正在讀取張三的工資,讀...
Mysql資料庫隔離級別鎖關係髒讀不可重複讀幻讀
我們在進行資料庫開發時經常會遇到程式事務的相關問題,對於髒讀 幻讀 不可重複讀等問題的處理。資料庫隔離級別以及會出現的問題,如下 隔離級別 資料丟失 髒讀不可重複讀 幻讀讀未提交read uncommitted noyes yesyes 讀已提交 read committed nono yesyes...