1. 程式人生 > >SQL事務--轉載

SQL事務--轉載

ref val pan try 事務使用 clas 主鍵 let 全局變量

SQL 事務(Transaction)

閱讀目錄

  • 1、概念
  • 2、建表
  • 3、事務
回到目錄

1、概念

指訪問並可能更新數據庫中各種數據項的一個程序執行單元(unit)由多個sql語句組成,必須作為一個整體執行
這些sql語句作為一個整體一起向系統提交,要麽都執行、要麽都不執行

語法步驟:
開始事務:BEGIN TRANSACTION --開啟事務
事務提交:COMMIT TRANSACTION --提交操作
事務回滾:ROLLBACK TRANSACTION --取消操作

回到目錄

2、建表

--建表
CREATE TABLE [Person](
[PersonId]    NVARCHAR(100) PRIMARY KEY ,        ---主鍵
[PersonName] NVARCHAR(100) NULL
)

回到目錄

3、事務

技術分享圖片
/*
    如果只有Begin TransAction和Commit TransAction 就算報錯了,也是不會回滾的
    Select * From Person
*/
Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘3‘,‘Name3‘)
Commit TransAction

/*
    如果只有Begin TransAction和RollBack TransAction 就算沒報錯了,還是會回滾的
    Select * From Person
*/
--清除數據
Delete Person
Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘3‘,‘Name3‘)
RollBack TransAction

/*
    SET XACT_ABORT ON時,在事務中,若出現錯誤,系統即默認回滾事務,但只對非自定義錯誤有效
    SET XACT_ABORT OFF,默認值,在事務中,回滾一個語句還是整個事務視錯誤的嚴重程序而定,
    用戶級錯誤一般不會回滾整個事務
    
    Select * From Person
*/
SET XACT_ABORT ON -- 打開
Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘3‘,‘Name3‘)
Commit TransAction
SET XACT_ABORT OFF -- 關閉

/*
    Try Catch 配合事務使用    
    Select * From Person
*/
Begin Try
    Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        Insert Into Person(PersonId,PersonName)Values(‘3‘,‘Name3‘)
    Commit TransAction
End Try
Begin Catch
    Rollback TransAction
End Catch

/*
    使用全局變量@@Error 配合事務使用    
    Select * From Person
*/
DECLARE @tran_error int;
SET @tran_error = 0;
    Begin TransAction
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        SET @tran_error = @tran_error + @@ERROR;
        print(@tran_error);
        Insert Into Person(PersonId,PersonName)Values(‘1‘,‘Name1‘)
        SET @tran_error = @tran_error + @@ERROR;
        print(@tran_error);
        Insert Into Person(PersonId,PersonName)Values(‘3‘,‘Name3‘)
        SET @tran_error = @tran_error + @@ERROR;
        print(@tran_error);
IF(@tran_error > 0)
    BEGIN
        --執行出錯,回滾事務
        ROLLBACK TransAction;
    END
ELSE
    BEGIN
        --沒有異常,提交事務
        COMMIT TransAction;
    END

SQL事務--轉載