[DB] Isolation
Dirty read transaction 還沒 commit,就已經讀得到更新後的結果
NON-repeatable reads 在同個 transaction 使用相同 query 卻讀取到不同資料 ps: dirty read 也是一種 non-repeatable reads
Phantom read 在同個 transaction 連續讀取兩次時,讀取出來的筆數跟上次不同
Isolation Level
Read Uncommitted: 代表 transaction 可以讀到別的 transaction 尚未 commit 的資料
Read Commited: 代表 transaction 只能讀到別的 transaction 已經 commit 的資料,沒有 commit 的話不會讀到
Repeatable Read: 代表每次 transaction 讀取特定欄位時,若使用的 query 條件相同,就會讀取到相同資料
Serializable: 代表在多個 transaction 同時執行時,只要 transaction 的順序相同,得到的結果也會相同
- MySQL 預設的 isolation level 是 Repeatable Read
- Postgres 預設的 isolation level 是 Read Committed
From: Wiki