事務的併發讀問題(髒讀,不可重複讀,幻讀)
阿新 • • 發佈:2018-12-22
- 事務的併發讀問題
- 髒讀:讀取到另一個事務未提交資料;
- 不可重複讀:兩次讀取不一致;(針對資料數值查詢)
- 幻讀(虛讀):讀到另一事務已提交資料。(針對記錄統計)
2 併發事務問題
因為併發事務導致的問題大致有5類,其中兩類是更新問題,三類是讀問題。
- 髒讀(dirty read):讀到另一個事務的未提交更新資料,即讀取到了髒資料;
- 不可重複讀(unrepeatable read):對同一記錄的兩次讀取不一致,因為另一事務對該記錄做了修改;
- 幻讀(虛讀)(phantom read):對同一張表的兩次查詢不一致,因為另一事務插入了一條記錄;
髒讀
事務1:張三給李四轉賬100元
事務2:李四檢視自己的賬戶
- t1:事務1:開始事務
- t2:事務1:張三給李四轉賬100元
- t3:事務2:開始事務
- t4:事務2:李四檢視自己的賬戶,看到賬戶多出100元(髒讀)
- t5:事務2:提交事務
- t6:事務1:回滾事務,回到轉賬之前的狀態
不可重複讀
事務1:酒店檢視兩次1048號房間狀態
事務2:預訂1048號房間
- t1:事務1:開始事務
- t2:事務1:檢視1048號房間狀態為空閒
- t3:事務2:開始事務
- t4:事務2:預定1048號房間
- t5:事務2:提交事務
- t6:事務1:再次檢視1048號房間狀態為使用
- t7:事務1:提交事務
對同一記錄的兩次查詢結果不一致!
幻讀
事務1:對酒店房間預訂記錄兩次統計
事務2:新增一條預訂房間記錄
- t1:事務1:開始事務
- t2:事務1:統計預訂記錄100條
- t3:事務2:開始事務
- t4:事務2:新增一條預訂房間記錄
- t5:事務2:提交事務
- t6:事務1:再次統計預訂記錄為101記錄
- t7:事務1:提交
對同一表的兩次查詢不一致!