SQL事務--轉載
阿新 • • 發佈:2018-07-30
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事務--轉載