🎯 什麼情境該想到我
當多個請求同時讀寫同一批資料、出現「錯亂/覆蓋/看到中間狀態」的併發問題時。
⚙️ 怎麼用(依你要防的異常挑隔離等級)
- 讀已提交(Read Committed):防髒讀、髒寫。最低堪用等級。
- 快照隔離 / 可重複讀(Snapshot Isolation):整個交易看同一份快照(MVCC),防不可重複讀。
- 可序列化(Serializable):最強,行為等同交易一個個依序執行,防所有異常(含寫偏斜 write skew / 幻讀)。實作:真序列化、2PL、或 SSI。
步驟:先想清楚你要防哪種併發異常,再選剛好夠的等級(越強越慢)。
🧪 我實際套用的紀錄
- 2026-07-15:(待填)
⚠️ 注意
- 很多預設是「讀已提交」,擋不住 write skew;涉及金額/庫存等不變式要特別確認等級。
- 別在交易內做外部 I/O(如發 MQ)→ 見 工具-Transactional-Outbox-Pattern。
🔗 相關工具
- 工具-線性一致性與共識 —— 把同一個問題拉到分散式:單機的隔離等級到了多節點就變成一致性與共識的取捨
- 工具-防禦式編程 —— 補位:隔離等級擋不掉的併發情境(如應用層的檢查再寫入),要靠這張的心態補上