首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle SELECT FOR UPDATE:查詢時鎖定記錄的標準做法

     編輯:Oracle 資料庫基礎

應用場景

需在讀取資料時獨佔鎖定該列記錄,防止其他會話修改或刪除,直到當前交易 COMMIT 或 ROLLBACK。

語法

SELECT * FROM table_name WHERE condition FOR UPDATE;
-- 或指定欄位
SELECT col1, col2 FROM table_name WHERE condition FOR UPDATE OF col1;

實測步驟(Oracle 8i/9i/10g+ 通用)

  1. 會話 1 執行查詢並鎖定:
    CONN test/test
    SELECT * FROM a FOR UPDATE;
    -- 此時記錄被鎖定
    
  2. 會話 2 嘗試刪除同一記錄:
    CONN test/test
    DELETE FROM a;
    -- 會話阻塞,等待鎖釋放
    
  3. 會話 1 釋放鎖:
    COMMIT;  -- 或 ROLLBACK;
    -- 會話 2 繼續執行
    

注意事項

  • FOR UPDATE 預設等待無限制;可加 NOWAIT 立即報錯 ORA-00054,或 WAIT n 秒。
  • 鎖定粒度為行;若無 WHERE 條件則鎖全表,慎用。
  • 長交易持有鎖會導致阻塞擴大,建議縮短交易時間。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved