在我們瞭解資料庫隔離級別前先來回顧一下資料庫讀資料時可能遇到的問題:
(1)髒讀
一個事務對資料進行更新操作,但還完成,此時另一事務讀取該資料,如果此時第一個事務由於操作失敗進行了回滾,那麼此時另外事務讀取的資料就是髒資料。
(2)不可重複讀
例如事務A在讀取某一資料,而事務B立馬修改了這個資料並且提交事務給資料庫,事務A再次讀取該資料就得到了不同的結果,傳送了不可重複讀。
ps:在某些情況下,不可重複讀並不是問題,比如我們多次查詢某個資料當然以最後查詢得到的結果為主。但在另一些情況下就有可能發生問題,例如對於同一個資料A和B依次查詢就可能不同,A和B就可能打起來了……
(3)幻讀
事例:事務A將表中所有資料都清為0,就在這時事務B插入了一條2的資料,此時A再檢視發現出現了一條為2的資料,就像發生了幻覺一樣。
四種隔離級別
(1)Read uncommitted
讀未提交,讀的事務還沒有提交就會被讀,會出現髒讀的現象。 ----寫允許讀
(2)Read committed
讀提交,就是隻讀提交後的事務,若有事務對資料進行更新(UPDATE)操作時,讀操作事務要等待這個更新操作事務提交後才能讀取資料,可以解決髒讀問題。出現了一個事務範圍內兩個相同的查詢卻返回了不同資料,這就是不可重複讀。 ----寫禁止讀
(3)Repeatable read
可重複讀,就是在開始讀取資料(事務開啟)時,不再允許修改操作。 ----讀禁止寫,寫禁止所有事務。
(4)Serializable
Serializable 是最高的事務隔離級別,在該級別下,事務序列化順序執行,可以避免髒讀、不可重複讀與幻讀。但是這種事務隔離級別效率低下,比較耗資料庫效能,一般不使用。
事務的四大特性:
原子性(atomicity):原子性是指事務包含的所有操作要麼全部成功,要麼全部失敗回滾
一致性(consistency):一致性是指事務必須使資料庫從一個一致性狀態變換到另一個一致性狀態,也就是說一個事務執行之前和執行之後都必須處於一致性狀態。
隔離性(isolation):隔離性是當多個使用者併發訪問資料庫時,比如操作同一張表時,資料庫為每一個使用者開啟的事務,不能被其他事務的操作所干擾,多個併發事務之間要相互隔離
永續性(durability):一旦事務提交,則其所做的修改就會永久儲存到資料庫中。此時即使系統崩潰,修改的資料也不會丟失。