| 隔離級別 | 髒讀 | 不可重複讀 | 幻讀 | 鎖/實現機制 |
|---|---|---|---|---|
| READ UNCOMMITTED (讀未提交) | ✅ 發生 | ✅ 發生 | ✅ 發生 | 無鎖,直接讀取內存數據 |
| READ COMMITTED (讀已提交) | ❌ 避免 | ✅ 發生 | ✅ 發生 | 行鎖(讀取瞬間加鎖即釋放) |
| REPEATABLE READ (可重複讀) InnoDB 默認 | ❌ 避免 | ❌ 避免 | ⚠️ 可能發生 (InnoDB 用 Next-Key Lock 避免) | MVCC 快照讀 + Next-Key Lock (當前讀) |
| SERIALIZABLE (串行化) | ❌ 避免 | ❌ 避免 | ❌ 完全避免 | 表鎖/範圍鎖,強制串行執行 |
tx_isolation = REPEATABLE-READSELECT 讀取歷史版本鏈,**不加鎖、不阻塞**SELECT ... LOCK IN SHARE MODE、SELECT ... FOR UPDATE、INSERT/UPDATE/DELETE 讀取最新版本並加鎖-- 會話級別
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
-- 全局級別 (需重啟或配置文件)
[mysqld]
transaction-isolation = REPEATABLE-READ
SELECT @@tx_isolation;
-- 或
SHOW VARIABLES LIKE 'tx_isolation';