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

MS SQL Server 交易處理完整指南:BEGIN/COMMIT/ROLLBACK 與儲存點

     編輯:關於SqlServer

交易是資料庫將多條 DML 綁定為不可分割工作單元的機制:要麼全做,要麼全不做(ACID 特性)。解決多表更新一致性問題的核心工具。

11.4.1 交易由來:多表更新一致性問題

刪除部門需同步刪除員工。若第一條 DELETE department 成功、第二條 DELETE employee 失敗(斷電、錯誤),資料庫將永久處於不一致狀態。交易確保兩條語句原子性執行。

11.4.2 交易語法與巢狀交易

BEGIN TRAN[SACTION] [transaction_name | @tran_var]
-- DML 陳述式
COMMIT [TRAN[SACTION] [transaction_name | @tran_var]]
  • BEGIN TRAN / COMMIT TRAN 可簡寫。
  • 交易名稱僅前 32 字元被識別。
  • 變數型別限 CHAR/VARCHAR/NCHAR/NVARCHAR。
  • 支援巢狀:內層 COMMIT 不實際寫入,僅外層最外層 COMMIT 真正提交。

交易範例1 交易範例2

11.4.3 交易回滾與儲存點

ROLLBACK [TRAN[SACTION] [transaction_name | @tran_var | savepoint_name | @savepoint_var]]
  • 未指定名稱/儲存點 → 回滾至交易起始(或最近的 BEGIN TRAN)。
  • 巢狀交易回滾至最近的 BEGIN TRAN。

儲存點:部分回滾

SAVE TRAN[SACTION] {savepoint_name | @savepoint_var}
  • 標記交易中「此點之前不可回滾」的邊界。
  • 後續發生錯誤可 ROLLBACK TO savepoint,保留前段操作。

儲存點範例1 儲存點範例2

注意:若不指定回滾目標,ROLLBACK 會回滾至交易起始;巢狀交易回滾至最近的 BEGIN TRAN。

實務模式

BEGIN TRY
    BEGIN TRAN
        -- 步驟 1
        SAVE TRAN Step1
        -- 步驟 2
        SAVE TRAN Step2
        -- 步驟 3
    COMMIT TRAN
END TRY
BEGIN CATCH
    IF @@TRANCOUNT > 0 ROLLBACK TRAN -- 或 ROLLBACK TO Step2
    -- 錯誤處理
END CATCH

總結

熟練掌握 BEGIN/COMMIT/ROLLBACK、巢狀交易行為與儲存點部分回滾,是撰寫健壯資料庫應用程式、保障資料一致性的核心技能。

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