[Day4] 讀 RDBMS 課程 2019 — Read Phenomena

By Triton Ho

R4 Cheng
Aug 24, 2023

At Lesson 1: Page 14 — Page 22

Notes

Three types: dirty read, non-reapeatable read, phantom read

Dirty Read

  • 能讀取其他還未 committed 的 TX 的資料改動
  • 在還未 Commit 之前, database 是處於 inconsistent state (不應該被其他人看到)
  • 任何情況下, Dirty Read 在 RDBMS 都應該避免的

MySQL, Oracle, PostgreSQL default dirty read will never happen

Non-repeatable read

  • 讀取的資料包含其他已經 committed TX 的 update ,而這些 TX 的 commit 時間發生在此 TX 的開始之後 (同一個 TX ,同一筆資料在第一次讀取和第二次讀取出現不同結果)
  • 第一次 Query 和第二次返回是同一批的 Record ,但是 Record 的內容不同
  • 一般來說,同一數據的第一次 select 是用作 data verification ,第二次是用作 data processing。

若 verification 和 processing 是使用不同的數值, 那麼 verification 根本是個笑話

Phantom read

  • 讀取的資料包含其他已經 committed TX 的 insert/update ,而這些 TX 的 commit 時間發生在本 TX 的開始之後 (同一TX,同一 Query 在第一次和第二次執行時,出現不同結果)
  • Phantom read 會讓第二次的 query 出現了新的 Record (Phantom = 阿飄)

Non-repeatable read vs. Phantom read!!

--

--

R4 Cheng
R4 Cheng

Written by R4 Cheng

「0」が過去で「1」が未来「今」は何処にもない

No responses yet