需在讀取資料時獨佔鎖定該列記錄,防止其他會話修改或刪除,直到當前交易 COMMIT 或 ROLLBACK。
SELECT * FROM table_name WHERE condition FOR UPDATE;
-- 或指定欄位
SELECT col1, col2 FROM table_name WHERE condition FOR UPDATE OF col1;
CONN test/test
SELECT * FROM a FOR UPDATE;
-- 此時記錄被鎖定
CONN test/test
DELETE FROM a;
-- 會話阻塞,等待鎖釋放
COMMIT; -- 或 ROLLBACK;
-- 會話 2 繼續執行
FOR UPDATE 預設等待無限制;可加 NOWAIT 立即報錯 ORA-00054,或 WAIT n 秒。WHERE 條件則鎖全表,慎用。