事務四大特性(ACID)中「隔離性」直接決定並發下的資料一致性。MySQL/InnoDB 支援四種隔離級別,本文在 Linux + MySQL 5.6 環境實測,雙 Session 同步操作 teachers 表,記錄各級別下的髒讀、不可重複讀、幻讀現象。
SET autocommit=0;SET tx_isolation='LEVEL';| 隔離級別 | 髒讀 | 不可重複讀 | 幻讀 | 並發性能 |
|---|---|---|---|---|
| READ UNCOMMITTED | ✅ 發生 | ✅ 發生 | ✅ 發生 | 最高 |
| READ COMMITTED | ❌ 避免 | ✅ 發生 | ✅ 發生 | 高 |
| REPEATABLE READ (InnoDB 預設) | ❌ 避免 | ❌ 避免 | ⚠️ 可能發生 | 中 |
| SERIALIZABLE | ❌ 避免 | ❌ 避免 | ❌ 避免 | 最低(表鎖) |
SELECT 直接阻塞等待鎖釋放,完全串行化。REPEATABLE READ 或 SERIALIZABLE。READ COMMITTED(Oracle/PostgreSQL 預設)。REPEATABLE READ 配合 next-key lock 已解決大部分幻讀,實務上較少手動升級為 SERIALIZABLE。







