MySQL四種隔離級別
在處理多用戶并發訪問數據庫時,MySQL采用隔離級別來控制事務對數據庫的影響范圍,MySQL提供了四種隔離級別,分別是:讀未提交(Read Uncommitted)、讀已提交(Read Committed)、可重復讀(Repeatable Read)和串行化(Serializable)。
讀未提交
讀未提交是隔離級別最低的一種,它允許一個事務讀取另一個正在進行中的事務中尚未提交的修改。該級別存在的問題是臟讀,也就是一個事務可以讀取到另一個未提交的事務所做出的修改,容易導致數據不一致。
讀已提交
讀已提交是MySQL默認的隔離級別,它要求一個事務只能讀取已提交的數據。這樣可以避免臟讀的問題。但是,該級別的問題在于不可重復讀,也就是同一事務內的兩次查詢可能查詢到不同的結果。
可重復讀
可重復讀要求事務在執行期間多次讀取同一個數據時,讀取到的結果必須是一致的。為了實現可重復讀,MySQL采用了一種叫做多版本并發控制(MVCC)的技術,它為每個事務創建一個視圖,該視圖包含當前事務啟動時間的數據庫快照,因此可以在該視圖中看到已提交的數據,在該事務未結束之前,其他事務所做出的變更對該事務不可見。但是在該級別中,當查詢涉及到多張表時,仍然存在幻讀問題。
串行化
串行化是隔離級別最高的一種,并發性最低,它通過對所有事務串行化來避免以上三種問題。在該級別下,所有事務按照順序執行,因此不會產生并發沖突。但是,該級別下并發性太低,可能會導致系統性能下降。