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

Oracle 交易控制完整教學:COMMIT、ROLLBACK、SAVEPOINT 與隱式/顯式交易

     編輯:Oracle 資料庫基礎

交易概念

交易 = 邏輯相關操作組成的單一工作單元。兩次成功的 COMMIT 或 ROLLBACK 之間的操作屬同一交易。交易內修改要么全提交、要么全撤銷,故障時自動回滾。

SQL 分類與交易關係

  • DML (SELECT/INSERT/UPDATE/DELETE): 產生交易
  • DDL (CREATE/DROP/ALTER) / DCL (GRANT/REVOKE): 執行即隱式提交,結束前一交易並啟動新交易

交易狀態流轉

  • 執行 DML → 修改在 Session 可見,他 Session 不可見
  • COMMIT → 永久寫入,所有 Session 可見
  • ROLLBACK → 撤銷未提交修改,回到交易起始狀態
  • SAVEPOINT → 設定中間回滾點,ROLLBACK TO SAVEPOINT 僅回退部分操作

隱式 vs 顯式交易控制

隱式提交

  • 正常離開 SQL*Plus
  • 執行 DDL/DCL
  • SET AUTOCOMMIT ON (預設 OFF) → 每條 DML 即時提交

隱式回滾

  • 異常中斷 SQL*Plus
  • 系統故障

顯式控制指令

  1. COMMIT:提交
  2. ROLLBACK:完全回滾
  3. SAVEPOINT name:設定回滾點
  4. ROLLBACK TO SAVEPOINT name:回退至存檔點

鐵律: COMMIT 後不可回滾;ROLLBACK 後欲重做須重新執行 DML。

新交易啟動時機

  • 建立 Session 並執行第一條 SQL
  • 執行 COMMIT / ROLLBACK
  • 執行 DDL/DCL

鎖定行為

修改時對列加鎖,其他 Session 無法修改/加鎖,直至提交或回滾釋放。

實戰範例:調薪交易

UPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = 7788;  -- 1 row updated
SELECT ENAME, SAL FROM EMP WHERE EMPNO = 7788;       -- SCOTT 4000
COMMIT;                                               -- Commit complete.

大型交易建議設 SAVEPOINT 分段,失敗時可部分回退。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved