資料庫四種事務隔離級別詳解

2022-05-15 02:03:21 字數 2160 閱讀 6997

四種資料庫隔離級別及解決的資料問題如下所示:

1.read-uncommitted(讀取未提交內容)

由於在該隔離級別下即使事務未提交所做的修改也會對其他事務產生影響。所以該級別會出現資料髒讀的發生。

髒讀:乙個事務讀取了另乙個未提交的並行事務寫的資料。

鎖情況:事務在讀取資料的時候並未對資料加鎖。在修改資料的時候只對資料增加行級共享鎖

(其他事務可以讀取但是不可以更新)。因此,事務在讀取資料的時候會讀取到其他事務未提交的資料產生髒讀。

問題舉例

:老闆給員工發工資,老闆開啟事務,然後想員工的賬戶轉錢10000元,事務暫不提交。此時員工開啟事務,檢視賬戶餘額發現多了10000元,然後提交事務。但是老闆發現轉多了,於是修改為轉5000元,然後提交事務。最終員工賬戶多5000元而不是10000元,所以之前員工看到的10000元是髒資料。

2. read-committed(讀取提交內容)

在該隔離級別下事務沒有提交是不會對其他事務產生影響的,只有提交的事務才會影響其他事務。所以避免了讀髒資料。但是該級別會出現兩次讀取資料庫資料不一致的情況(不可重複讀)。

不可重複讀:同乙個事務中重新讀取前面讀取過的資料,發現兩次讀取資料不一樣(該資料已經被另乙個已提交的事務修改過)。

鎖情況:事務對當前被讀取的資料加行級共享鎖

,一旦讀完該行就立即釋放該鎖;事務在更新某資料的瞬間,必須先對資料增加行級排他鎖

(其他事務不可以對該資料進行任何操作),直到事務結束才釋放。因此,事務在修改的工程中由於事務沒有提交所以不會影響到其他事務,避免了髒讀的發生。但是會出現不可重複讀的情況。

問題舉例

:老闆給員工發工資。員工開啟事務,檢視賬戶餘額(此時對資料增加了行級共享鎖),發現賬戶餘額是0元,然後釋放了該鎖。發現老闆尚未轉錢。此時,老闆開啟事務,然後向員工的賬戶裡面轉錢一萬元(事務對該資料增加了行級排他鎖),在事務未提交之前員工是無法進行檢視餘額的操作。緊接著老闆提交事務,在這之後員工可以進行檢視操作。然後員工覺得不對勁又檢視了一次(員工之前的事務尚未提交),發現現在餘額是一萬元。即員工在同一事務下兩次相同檢視操作得到的結果不一致。

3. repeatable-read(可重複讀)

在該隔離級別下兩個事務同時進行,其中乙個事務修改資料不會對另乙個事務造成影響,即使修改的事務已經提交也不會對另乙個事務造成影響。因此,該隔離級別不會出現不可重複讀的情況。但是,該級別下會出現幻讀。

幻讀:是指當事務不是獨立執行時發生的一種現象,例如第乙個事務對乙個表中的資料進行了修改,這種修改涉及到表中的全部資料行。同時,第二個事務也修改這個表中的資料,這種修改是向表中插入一行新資料。那麼,以後就會發生操作第乙個事務的使用者 發現表中還有沒有修改的資料行,就好象發生了幻覺一樣.

鎖情況:事務在讀取某資料的瞬間,必須先對其加行級共享鎖

,直到事務結束才釋放;事務在更新某資料的瞬間,必須先對其加行級排他鎖

,直到事務結束才釋放。因此,事務在讀取資料的時候其他事務是可以對該資料進行讀取操作,因此避免了不可重複讀的情況。但是無法避免幻讀的發生。

問題舉例

:目前分數為90分以上的的學生有15人,事務a開啟,並讀取所有分數為90分以上的的學生人數(事務對該資料增加了行級共享鎖),發現有15人,暫不提交事務。此時,事務b開啟,並插入一條分數為99的學生記錄,然後提交事務。此時,事務a再次讀取90分以上的的學生,發現記錄為16人,多了乙個人。此時產生了幻讀。

4.serierlized(可序列化)

該事務隔離級別最嚴厲,在進行查詢時就會對錶加上共享鎖,其他事務對該錶將只能進行讀操作,而不能進行寫操作。

鎖情況:事務在讀取資料時,必須先對其加表級共享鎖

,直到事務結束才釋放;事務在更新資料時,必須先對其加表級排他鎖

,直到事務結束才釋放。因此,事務a在查詢資料的時候就對該錶增加了表級共享鎖,其他事務只可以對該錶進行查詢操作直到事務a提交。所以避免了幻讀的產生。

現象:事務1正在讀取a表中的記錄時,則事務2也能讀取a表,但不能對a表做更新、新增、刪除,直到事務1結束。(因為事務一對表增加了表級共享鎖,其他事務只能增加共享鎖讀取資料,不能進行其他任何操作)

事務1正在更新a表中的記錄時,則事務2不能讀取a表的任意記錄,更不可能對a表做更新、新增、刪除,直到事務1結束。(事務一對表增加了表級排他鎖,其他事務不能對錶增加共享鎖或排他鎖,也就無法進行任何操作)

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...

資料庫事務四種隔離級別

定義 在資料庫操作中,為了有效保證併發讀取資料的正確性,提出的事務隔離級別。資料庫事務的隔離級別有4個,由低到高依次為read uncommitted 未授權讀取 讀未提交 read committed 授權讀取 讀提交 repeatable read 可重複讀取 serializable 序列化 ...