四大隔離級別核心定義
| 隔離級別 | 全稱 | 鎖行為 | 一致性保證 | 並發度 |
| RR | Repeatable Read | 掃描所有資料列加 S 鎖,提交/回滾才釋放 | 可重複讀、無幻影讀 | 最低 |
| RS | Read Stability | 符合條件資料列加 NS 鎖,提交/回滾才釋放 | 可重複讀、允許幻影讀 | 中 |
| CS | Cursor Stability | 僅游標指向當前列加 NS 鎖 | 當前列不被修改、允許不可重複讀/幻影讀 | 高 (預設) |
| UR | Uncommitted Read | 唯讀操作不加列鎖 | 可讀未提交資料、最高並發 | 最高 |
關鍵差異深度解析
RR vs RS:鎖定範圍差異
- RR:掃描 10,000 列找到 100 列符合 → 鎖定 10,000 列
- RS:相同情況 → 僅鎖定 100 列符合條件者
- RR 禁止插入/更新不符合條件列 (防止結果集改變),RS 允許
CS:預設平衡點
- 僅保護「正在讀取的那一列」
- 極高並發,但無法保證重複讀取一致性
UR:極致效能代價
- 適用:唯讀報表、可容忍髒讀
- 限制:
SELECT ... FOR FETCH ONLY 或含 ORDER BY 的查詢
- 風險:資料完整性無保障
實測驗證筆記 (個人測試結果)
| 隔離級別 | 查詢完成後鎖定狀態 | 允許操作 | 禁止操作 |
| RS | 符合條件列被鎖 | 更新不符合條件列、插入新列、他人查詢鎖定列 | 更新鎖定列 |
| RR | 掃描範圍所有列被鎖 | SELECT FOR UPDATE WITH RR 特殊情況 | 更新任何列、插入新列 |
| CS | 僅游標當前列 (極短暫) | 幾乎所有並發操作 | 極少 |
| UR | 無列鎖 | 完全無限制讀取 | 無 (讀取端) |
修改操作通用規則
無論隔離級別,被修改列皆加 X 鎖,至提交/回滾才釋放。隔離級別僅影響「讀取操作」的鎖行為。
應用選擇指引
- 財務核心交易:RR (最高一致性)
- 一般業務查詢:CS (預設平衡)
- 長報表/分析查詢:RS (避免全表鎖定)
- 即時儀表板/可容忍髒讀:UR (最高吞吐)