數據庫的四種隔離級別的解釋

今天總算是搞明白了可重復讀這種隔離級別中說的幻讀是什么意思。然后把數據庫的四種隔離級別整理一下:

在SQL標準中定義了四種隔離級別,每一種級別都規定了一個事務中所做的修改,哪些在事務內和事務間是可見的,哪些是不可見的。

一共有四種隔離級別,從低到高依次為:read uncommitted(未提交讀), read commited(提交讀), repeatable read(可重復讀),serializable(可串行化)

較低的隔離級別支持可以執行更高的并發,和更小的系統開銷

未提交讀級別:事務中的修改,即使沒有提交,對其他事務也都是可見的。事務能讀取未提交的數據,也被稱作臟讀,這個級別會導致很多問題,在實際應用中一般不會用到。

提交讀級別:解決了未提交讀級別的臟讀問題。一個事務開始時,只能看見已經提交的事務所做的修改。換句話說,一個事務從開始直到提交之前,所做的任何修改對其他事務都是不可見的。這個級別有時候也叫做不可重復讀,因為同一個事務中兩次執行同樣的查詢,可能會得到不一樣的結果。(恰好在兩次查詢之間的時間,其他某個事務完成了對數據的更新)。

可重復讀級別:上面的提交讀級別解決了未提交讀級別的臟讀問題,但是無法保證在一個事務中兩次讀到同樣記錄的結果是一致的。此可重復讀級別解決了此問題,能保證在同一個事務中,兩次讀取同樣的記錄結果是一致的。但是可重復讀級別不能解決幻讀的問題。幻讀是指當某個事務在讀取某個范圍內的記錄時,會產生幻行。(幻行可通過樂觀鎖和悲觀鎖來解決)。

可串行化級別:是最高級別,它通過強制事務串行化執行,避免了前面說的幻讀的問題。但是會導致大量的超時和鎖競爭的問題。

臟讀:一行記錄,兩次讀取結果不一樣

幻讀:一個范圍的記錄(幾條記錄),兩次讀取的記錄條數不一樣,通常是指多幾條

提交讀(不可重復讀)級別解決了臟讀問題,但存在不可重復讀問題。
可重復讀級別解決了可重復讀問題,但是存在幻讀問題
串行化級別解決了幻讀問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容