1. 程式人生 > >事務的併發讀問題(髒讀,不可重複讀,幻讀)

事務的併發讀問題(髒讀,不可重複讀,幻讀)

  1. 事務的併發讀問題
  1. 髒讀:讀取到另一個事務未提交資料;
  2. 不可重複讀:兩次讀取不一致;(針對資料數值查詢)
  3. 幻讀(虛讀):讀到另一事務已提交資料。(針對記錄統計)

 

2 併發事務問題

因為併發事務導致的問題大致有5類,其中兩類是更新問題,三類是讀問題。

  1. 髒讀(dirty read):讀到另一個事務的未提交更新資料,即讀取到了髒資料;
  2. 不可重複讀(unrepeatable read):對同一記錄的兩次讀取不一致,因為另一事務對該記錄做了修改;
  3. 幻讀(虛讀)(phantom read):對同一張表的兩次查詢不一致,因為另一事務插入了一條記錄;

 

髒讀

事務1:張三給李四轉賬100元

事務2:李四檢視自己的賬戶

  1. t1:事務1:開始事務
  2. t2:事務1:張三給李四轉賬100元
  3. t3:事務2:開始事務
  4. t4:事務2:李四檢視自己的賬戶,看到賬戶多出100元(髒讀)
  5. t5:事務2:提交事務
  6. t6:事務1:回滾事務,回到轉賬之前的狀態

 

不可重複讀

事務1:酒店檢視兩次1048號房間狀態

事務2:預訂1048號房間

  1. t1:事務1:開始事務
  2. t2:事務1:檢視1048號房間狀態為空閒
  3. t3:事務2:開始事務
  4. t4:事務2:預定1048號房間
  5. t5:事務2:提交事務
  6. t6:事務1:再次檢視1048號房間狀態為使用
  7. t7:事務1:提交事務

對同一記錄的兩次查詢結果不一致!

 

幻讀

事務1:對酒店房間預訂記錄兩次統計

事務2:新增一條預訂房間記錄

  1. t1:事務1:開始事務
  2. t2:事務1:統計預訂記錄100條
  3. t3:事務2:開始事務
  4. t4:事務2:新增一條預訂房間記錄
  5. t5:事務2:提交事務
  6. t6:事務1:再次統計預訂記錄為101記錄
  7. t7:事務1:提交

  對同一表的兩次查詢不一致!