原文:
髒讀: (讀取了未提交的新事物,然後被回滾了)
事務a讀取了事務b中尚未提交的資料。如果事務b回滾,則a讀取使用了錯誤的資料。
比如我給你轉了100萬,但是我還沒有提交,此時你查詢自己賬戶,多了100萬,很開心。然後我發現轉錯人了,回滾了事物。然後你100萬就沒了。 在過程中你查到了沒有提交事物的資料(多出的100萬),這就是髒讀。
(解決:如果 乙個事物在讀的時候,禁止讀取未提交的事物。是不是就解決了。)
不可重複讀: (讀取了提交的新事物,指更新操作)
不可重複讀是指在對於資料庫中的某個資料,乙個事務範圍內多次查詢卻返回了不同的資料值,這是由於在查詢間隔,被另乙個事務修改並提交了。
不可重複讀和髒讀的區別是,髒讀是某一事務讀取了另乙個事務未提交的髒資料,而不可重複讀則是讀取了前一事務提交的資料。
在某些情況下,不可重複讀並不是問題,比如我們多次查詢某個資料當然以最後查詢得到的結果為主。但在另一些情況下就有可能發生問題,例如同乙個事物前後兩次查詢同乙個資料,期望兩次讀的內容是一樣的,但是因為讀的過程中,因為令乙個資料寫了該資料,導致不可重複讀。(解決:如果 乙個事物在讀的時候,禁止任何事物寫。是不是就解決了。)
幻讀:(也是讀取了提交的新事物,指增刪操作)
在事務a多次讀取構成中,事務b對資料進行了新增操作,導致事務a多次讀取的資料不一致。幻讀和不可重複讀的區別在於,
不可重複是針對記錄的update操作,只要在記錄上加寫鎖,就可避免;幻讀是對記錄的insert操作,
要禁止幻讀必須加上全域性的寫鎖(比如在表上加寫鎖)。 另外說一下兩類丟失更新:
(解決,如果乙個事物加上表級鎖,只要有任何東西操作這個表的時候,禁止任何操作的併發)
資料庫隔離級別
read uncommited 讀未提交 最低級別,可讀取未提交事物的資料,這會導致髒讀,比如 某時刻會話a修改了乙個資料,但還未提交,此時會話b,讀取了該資料,這是,會話a回滾了事物,這就導致資料出現了不一致狀態,這就是髒讀 read commited 提交讀 避免了髒讀,但會導致不可重複讀,例如...
資料庫隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀 不可重複讀 幻讀read uncommitted re...
資料庫隔離級別
資料庫事務的隔離級別有4個,由低到高依次為read uncommitted read committed repeatable read serializable,這四個級別可以逐個解決髒讀 不可重複讀 幻讀這幾類問題。可能出現 不會出現 髒讀不可重複讀 幻讀read uncommitted rea...