贓讀、不可重複讀 和 幻讀

三種讀法的產生緣由:都是因爲併發訪問致使數據發生了變化數據庫

1.髒讀(讀取未提交的數據)

  事務A正在訪問數據,而且對數據進行了修改,而這種修改尚未提交到數據庫中;此時事務B也訪問這個數據,而且使用了這個數據。併發

2.不可重複讀(先後屢次讀取,發現數據內容不一致)

  事務A在執行讀取操做,因爲事務A比較大,先後讀取完同一條數據可能須要經歷很長的時間。當事務A讀取完一條數據;隨後事件B執行了更改操做,將以前的數據進行了修改;當事務A第二次讀取這串數據,發現這次讀取的數據內容跟以前不一樣了,也就是數據不重複了。spa

  事務A 事務B
1 開始事務  
2 第一次讀取數據,小明年齡爲20  
3   開始事務
4 其餘操做  
5   更改小明年齡爲30
6   提交事務
7 第二次讀取數據,此時小明年齡已爲30  
備註 按照正常邏輯,事務A先後兩次取到的數據應該一致

 

3.幻讀(先後屢次讀取,發現數據總量不一致)

  事務A在執行讀取操做,須要進行兩次統計數據的總量,前一次查詢完數據總量後;此時事務B執行了新增數據總量的操做,而且提交;事件A進行第二次讀取數據的總量,發現跟第一次統計的數量不一樣,就像產生了幻覺同樣,無緣無故的多了幾條數據。事件

  事務A 事務B
1 開始事務  
2 第一次查詢,假設數據總量爲100條  
3   開始事務
4 其餘操做  
5   新增長100條數據
6   提交事務
7 第二次查詢,發現數據總量已爲200條  
備註 按照正常邏輯,事務A先後兩次取到的數據應該一致

注意:事務

  不可重複讀的重點是修改:一樣的條件,你讀取過的數據,再次讀取出來發現值不同了。table

  幻讀的重點在於新增或者刪除:一樣的條件,第 1 次和第 2 次讀出來的記錄數不同。統計

相關文章
相關標籤/搜索