我們知道,事務的四大特性是a(原子性)、c(一致性)、i(隔離性)、d(永續性)。
事務隔離級別就是為了滿足隔離性的機制。
在併發場景下,如果沒有一定的處理方式,就會出現髒讀、幻讀、不可重複讀三類問題。
髒讀:事務a在執行過程中,修改了某資料,事務b讀取了修改後的資料,然後事務a進行了回滾操作,這個時候事務b讀取到的資料就是"髒資料"。
不可重複讀:事務a讀取了兩次資料,在這個過程中事務b修改了這部分資料並提交,導致兩次讀取出來的資料不一樣。
幻讀:和不可重複讀有點像,事務a讀取兩次資料,在這個過程中事務b在資料集合裡新增了一條記錄,導致兩次讀出來的條數不一樣。幻讀強調的是資料集合的增減,不關注某一條記錄的修改。
針對這三類問題,sql標準定義了四種隔離級別:
讀未提交
read uncommitted
讀已提交
read committed
可重複讀
repeatable read
序列化serializable
從上到下,隔離強度依次變強,效能也依次降低,mysql支援這四種事務隔離級別,預設為可重複讀。
下面是在這四種隔離級別下,三類問題的解決程度。
隔離級別\發生問題
髒讀不可重複讀
幻讀讀未提交
未解決未解決
未解決讀已提交
已解決未解決
未解決可重複讀
已解決已解決
未解決序列化
已解決已解決
已解決讀未提交和序列化基本上是不需要考慮的隔離級別,前者沒有任何鎖限制,後者對效能影響太大。
事務 隔離級別 髒讀 不可重複 幻讀
事務,就是一組運算元據庫的動作集合。如果一組 處理步驟 全部發生或者一步也不執行,我們稱該組處理步驟為乙個事務。當所有的步驟像乙個操作一樣被完整地執行,我們稱該事務被提交。由於其中的一部分或多步執行失敗,導致沒有步驟被提交,則事務必須回滾到最初的系統狀態。二 事務的併發問題 1 髒讀 事務 a讀取了...
事務隔離級別 髒讀 不可重複讀 幻讀 介紹
事務是現代關係型資料庫的核心之一。在多個事務併發運算元據庫 多執行緒 網路併發等 的時候,如果沒有有效的避免機制,就會出現以下幾種問題 a事務執行過程中,b事務讀取了a事務的修改。但是由於某些原因,a事務可能沒有完成提交,發生rollback了操作,則b事務所讀取的資料就會是不正確的。這個未提交資料...
髒讀 幻讀和不可重複讀 事務隔離級別
1.髒讀 髒讀就是指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。e.g.1.mary的原工資為1000,財務人員將mary的工資改為了8000 但未提交事務 2.mary讀取自己的工資 發現自己的工資變為了800...