併發問題可歸納為以下幾類:a.
丟失更新:撤銷乙個事務時,把其他事務已提交的更新資料覆蓋(a和
b事務併發執行,
a事務執行更新後,提交;
b事務在
a事務更新後,
b事務結束前也做了對該行資料的更新操作,然後回滾,則兩次更新操作都丟失了)。
b.髒讀:乙個事務讀到另乙個事務未提交的更新資料(a和
b事務併發執行,
b事務執行更新後,
a事務查詢
b事務沒有提交的資料,
b事務回滾,則
a事務得到的資料不是資料庫中的真實資料。也就是髒資料,即和資料庫中不一致的資料)。
c.不可重複讀:乙個事務讀到另乙個事務已提交的更新資料(a和
b事務併發執行,
a事務查詢資料,然後
b事務更新該資料,
a再次查詢該資料時,發現該資料變化了)。
d. 覆蓋更新:這是不可重複讀中的特例,乙個事務覆蓋另乙個事務已提交的更新資料(即
a事務更新資料,然後
b事務更新該資料,
a事務查詢發現自己更新的資料變了)。
e.虛讀(幻讀):乙個事務讀到另乙個事務已提交的新插入的資料(a和
b事務併發執行,
a事務查詢資料,
b事務插入或者刪除資料,
a事務再次查詢發現結果集中有以前沒有的資料或者以前有的資料消失了)。
資料庫系統提供了四種事務隔離級別供使用者選擇:
a.serializable
(序列化):乙個事務在執行過程中完全看不到其他事務對資料庫所做的更新(事務執行的時候不允許別的事務併發執行。事務序列化執行,事務只能乙個接著乙個地執行,而不能併發執行。)。
b.repeatable read
(可重複讀):乙個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,但是不能看到其他其他事務對已有記錄的更新。
c.read commited
(讀已提交資料):乙個事務在執行過程中可以看到其他事務已經提交的新插入的記錄,而且能看到其他事務已經提交的對已有記錄的更新。
d.read uncommitted
(讀未提交資料):乙個事務在執行過程中可以看到其他事務沒有提交的新插入的記錄,而且能看到其他事務沒有提交的對已有記錄的更新。
丟失更新
髒讀非重複讀
覆蓋更新
幻像讀未提交讀yy
yyy已提交讀nn
yyy可重複讀nn
nny序列化nn
nnn隔離級別
資料庫系統有四個隔離級別(大多數資料庫預設級別為read commited)。對資料庫使用何種隔離級別要審慎分析,因為
1. 維護乙個最高的隔離級別雖然會防止資料的出錯,但是卻導致了並行度的損失,以及導致死鎖出現的可能性增加。
2. 然而,降低隔離級別,卻會引起一些難以發現的bug。
serializable(序列化)
新增範圍鎖(比如表鎖,頁鎖等,關於range lock,我也沒有很深入的研究),直到transaction a結束。以此阻止其它transaction b對此範圍內的insert,update等操作。
幻讀,髒讀,不可重複讀等問題都不會發生。
repeatable read(可重複讀)
對於讀出的記錄,新增共享鎖直到transaction a結束。其它transaction b對這個記錄的試圖修改會一直等待直到transaction a結束。
可能發生的問題:當執行乙個範圍查詢時,可能會發生幻讀。
read committed(提交讀)
在transaction a中讀取資料時對記錄新增共享鎖,但讀取結束立即釋放。其它transaction b對這個記錄的試圖修改會一直等待直到a中的讀取過程結束,而不需要整個transaction a的結束。所以,在transaction a的不同階段對同一記錄的讀取結果可能是不同的。
可能發生的問題:不可重複讀。
read uncommitted(未提交讀)
不新增共享鎖。所以其它transaction b可以在transaction a對記錄的讀取過程中修改同一記錄,可能會導致a讀取的資料是乙個被破壞的或者說不完整不正確的資料。
另外,在transaction a中可以讀取到transaction b(未提交)中修改的資料。比如transaction b對r記錄修改了,但未提交。此時,在transaction a中讀取r記錄,讀出的是被b修改過的資料。
可能發生的問題:髒讀。
事務併發 事務隔離級別
併發問題可歸納為以下幾類 a.丟失更新 撤銷乙個事務時,把其他事務已提交的更新資料覆蓋 a和b事務併發執行,a事務執行更新後,提交 b事務在a事務更新後,b事務結束前也做了對該行資料的更新操作,然後回滾,則兩次更新操作都丟失了 b.髒讀 乙個事務讀到另乙個事務未提交的更新資料 a和b事務併發執行,b...
併發事務問題與事務隔離級別
1 髒讀 乙個事物讀到另乙個事務還沒有提交的資料。2 不可重複讀 乙個事務先後讀取同一條記錄,但兩次讀取的資料不同,稱之為不可重複讀。3 幻讀 乙個事務按照條件查詢資料時,沒有對應的資料行,但是在插入資料時,又發現這行資料已經存在,好像出現了 幻影 隔離級別 髒讀不可重複讀 幻讀read uncom...
Mysql的ACID 事務併發 事務隔離級別
目錄 一 事務的基本要素 acid a atomicity,即原子性 c consistency,即一致性 i isolation,即隔離性 d durability,即永續性 二 事務的併發問題 1.髒讀 2.不可重複讀 3.幻讀 三 mysql的事務隔離級別 事務開始後的所有操作,要麼全部完成,...