SQL 中事務的分類


先講下事務執行流程:

 BEGIN和COMMIT

PRINT @@TRANCOUNT --@@TRANCOUNT統計事務數量
BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT COMMIT TRAN --只提交一個事務 PRINT @@TRANCOUNT COMMIT TRAN PRINT @@TRANCOUNT

結果:

ROLLBACK

PRINT @@TRANCOUNT
BEGIN TRAN
    PRINT @@TRANCOUNT
    BEGIN TRAN
        PRINT @@TRANCOUNT
ROLLBACK TRAN --回滾所有事務
PRINT @@TRANCOUNT

結果:

  由上可知BEGIN TRAN 開始事務,使事務數量加一

      COMMIT TRAN 使事務減一,提交最新開辟的事務

      ROLLBACK 使事務數量直接減為0,也就是回滾

事務分類:

  1.顯示事務

  2.隱式事務模式

  3.自動提交事務

 

--顯示事務

SET NOCOUNT ON
SET IMPLICIT_TRANSACTIONS OFF --設置為顯示事務模式,也就是自動提交模式
PRINT '顯示事務開始前:'+CAST(@@TRANCOUNT AS varchar(10))
GO
IF EXISTS(SELECT *FROM sys.tables WHERE name='Table1')
DROP TABLE Table1

CREATE TABLE Table1
(
col1 int 
)
GO
INSERT INTO Table1 VALUES(1)
PRINT '插入數據時事務數:'+CAST(@@TRANCOUNT AS varchar(10))

BEGIN TRAN
PRINT '開始事務時的事務數:'+CAST(@@TRANCOUNT AS varchar(10))
COMMIT TRAN
GO
PRINT '提交事務后的事務數:'+ CAST(@@TRANCOUNT AS varchar(10))
GO

結果:

  

 


--隱式事務模式

SET IMPLICIT_TRANSACTIONS ON --打開隱式事務模式
INSERT INTO Table1 VALUES(2)
INSERT INTO Table1 VALUES(2)
PRINT '插入數據時事務數:'+CAST(@@TRANCOUNT AS varchar(10))
COMMIT TRAN 
--如果不顯示提交事務,那么如果下一條語句是(INSERT,DELECT,UPDATE,CREATE,TRUNCAST TABLE ,所有DROP,ALTER TABLE,GRINT,REVOK,SELECT)就會自動新建一個事務 
PRINT '提交隱式事務后的事務數:'+CAST(@@TRANCOUNT AS varchar(10))
GO

結果:

  

 

--自動提交事務

--當設置IMPLICIY_TRANSACTIONS OFF 就恢復為自動提交模式
SET IMPLICIT_TRANSACTIONS OFF
GO
INSERT INTO Table1 VALUES(3) --沒有錯誤自動提交
PRINT @@TRANCOUNT

INSERT INTO Table1 VALUES(3,3) --有錯誤自動回滾
PRINT @@TRANCOUNT

 結果:

  

--沒有錯誤自動提交

  

--有錯誤自動回滾

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM