隔離級別是為了在併發環境下保證資料讀取正確性而提出的機制。隔離級別越高,資料一致性越強,但併發效能損耗越大。多數應用建議預設使用 Read Committed,可避免髒讀且併發性能較好;個別場景下的不可重複讀、幻讀可由應用層用悲觀/樂觀鎖控制。
| 隔離級別 | 髒讀 | 不可重複讀 | 幻讀 | 併發效能 |
|---|---|---|---|---|
| READ UNCOMMITTED(讀未提交) | ✅ 發生 | ✅ 發生 | ✅ 發生 | 最高 |
| READ COMMITTED(讀已提交) | ❌ 避免 | ✅ 發生 | ✅ 發生 | 高 |
| REPEATABLE READ(可重複讀) | ❌ 避免 | ❌ 避免 | ✅ 發生 | 中 |
| SERIALIZABLE(序列化) | ❌ 避免 | ❌ 避免 | ❌ 避免 | 最低 |
假設兩事務 T1、T2 並發執行:
實務建議: MySQL 預設 RR 級別配合 innodb_locks_unsafe_for_binlog=OFF(預設)已能解決大多數幻讀問題。若業務極度要求一致性可升級至 Serializable,但需評估效能代價。