PL/SQL Developer 內置「數據編輯器」雙模式,底層 SQL 差異決定了並發影響、鎖持有時間、事務邊界。本文深度解析兩種模式原理與適用場景。
SELECT * FROM table FOR UPDATE(默認雙擊表名觸發)SELECT * FROM student FOR UPDATE;
SELECT ... FOR UPDATE NOWAIT。INSERT/UPDATE/DELETE 將阻塞等待鎖釋放。SELECT ... FOR UPDATE 也會阻塞。COMMIT 或 ROLLBACK 才釋放鎖。SELECT t.*, t.rowid FROM table t(右鍵 → 「View Data」/「Edit Data」觸發)SELECT t.*, t.rowid FROM student t;
ROWID 生成單條 UPDATE ... WHERE ROWID = :b1 並提交。SELECT num, name, t.rowid FROM student t; 減少網絡傳輸。| 維度 | FOR UPDATE 模式 | ROWID 無鎖模式 |
|---|---|---|
| 觸發方式 | 對象瀏覽器雙擊表名 | 右鍵表名 → View/Edit Data |
| 底層 SQL | SELECT * FROM t FOR UPDATE | SELECT t.*, t.rowid FROM t |
| 鎖類型 | 行排他鎖 (TX) | 無鎖 |
| 並發影響 | 阻塞所有 DML | 零阻塞 |
| 事務邊界 | 整個編輯會話一個事務 | 每行 UPDATE 獨立事務 |
| 適用場景 | 獨佔維護、防並發修改 | 日常查改、高並發 |
| 風險等級 | 高(易忘記 COMMIT 導致死鎖) | 低 |
UPDATE ... WHERE ... + COMMIT,可控性更強。ROLLBACK; 釋放鎖。AUDIT UPDATE ON table BY ACCESS 記錄誰在何時改了什麼。認清「雙擊表名 = 加鎖」,養成「右鍵看數據」肌肉記憶,能為生產庫規避 90% 由工具誤操作引發的鎖衝突事故。