| 現象 | 說明 | 範例結果 |
|---|---|---|
| 髒讀 | 讀到未提交的資料,回滾後資料不一致 | T1 加 100 未提交,T2 讀到 120 並減 10,T1 回滾 → 結果 110 (錯) |
| 不可重複讀 | 同一交易多次讀取同一資料,結果不同 | T1 讀 20,T2 讀 20,T1 改 120,T2 改 10,T1 寫入 110,T2 覆蓋寫入 10 (錯) |
| 幻讀 | 範圍查詢前後筆數不同 (新增/刪除) | T1 掃描全表,T2 插入新列,T1 發現「多出」列 |
| 隔離級別 | 髒讀 | 不可重複讀 | 幻讀 | Oracle 支援 |
|---|---|---|---|---|
| Read Uncommitted | 允許 | 允許 | 允許 | 不支援 |
| Read Committed | 防止 | 允許 | 允許 | 預設 |
| Serializable | 防止 | 防止 | 防止 | 支援 (效能較低) |
| Read Only | 防止 | 防止 | 防止 | Oracle 專有 (禁止 UPDATE) |
-- 交易層級 (交易開始前)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION ISOLATION LEVEL READ ONLY;
-- Session 層級
ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
ALTER SESSION SET ISOLATION_LEVEL = READ ONLY;
CREATE/ALTER/DROP/TRUNCATE → 獨佔資料庫物件結構。INSERT/UPDATE/DELETE → 列級獨佔鎖 (TX) + 表級共享鎖 (TM)。ALTER SYSTEM ENABLE RESTRICTED SESSION (限制模式)、STARTUP MOUNT; ALTER DATABASE OPEN READ ONLY。| 模式 | 相容性 | 典型場景 |
|---|---|---|
| Share (S) | 允許其他 S,禁止 X | 建立索引 |
| Row Share (RS) | 允許其他 RS/RX/S/SRX,禁止 X | SELECT ... FOR UPDATE |
| Row Exclusive (RX) | 允許其他 RS/RX,禁止 S/SRX/X | INSERT/UPDATE/DELETE (預設) |
| Share Row Exclusive (SRX) | 僅允許 RS,禁止其他 | 較少見 |
| Exclusive (X) | 完全獨佔 | DROP TABLE / ALTER TABLE |
TX 鎖永遠為 Exclusive (X),列級獨佔。
執行 UPDATE dept SET loc='北京' WHERE deptno=40; 後,EM 顯示:
驗證:DML 同時持有表級 RX (允許並發 DML) 與列級 X (序列化同列更新)。
SELECT ... FOR UPDATE、LOCK TABLE 等顯式鎖輔助業務邏輯。