欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SQL 中事务的分类

程序员文章站 2022-09-30 22:54:11
先讲下事务执行流程: BEGIN和COMMIT 结果: ROLLBACK 结果: 由上可知BEGIN TRAN 开始事务,使事务数量加一 COMMIT TRAN 使事务减一,提交最新开辟的事务 ROLLBACK 使事务数量直接减为0,也就是回滚 事务分类: 1.显示事务 2.隐式事务模式 3.自动提 ......

先讲下事务执行流程:

 BEGIN和COMMIT

PRINT @@TRANCOUNT --@@TRANCOUNT统计事务数量
BEGIN TRAN PRINT @@TRANCOUNT BEGIN TRAN PRINT @@TRANCOUNT COMMIT TRAN --只提交一个事务 PRINT @@TRANCOUNT COMMIT TRAN PRINT @@TRANCOUNT

结果:SQL 中事务的分类

ROLLBACK

PRINT @@TRANCOUNT
BEGIN TRAN
    PRINT @@TRANCOUNT
    BEGIN TRAN
        PRINT @@TRANCOUNT
ROLLBACK TRAN --回滚所有事务
PRINT @@TRANCOUNT

结果:SQL 中事务的分类

  由上可知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

结果:

  SQL 中事务的分类

 


--隐式事务模式

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

结果:

  SQL 中事务的分类

 

--自动提交事务

--当设置IMPLICIY_TRANSACTIONS OFF 就恢复为自动提交模式
SET IMPLICIT_TRANSACTIONS OFF
GO
INSERT INTO Table1 VALUES(3) --没有错误自动提交
PRINT @@TRANCOUNT

INSERT INTO Table1 VALUES(3,3) --有错误自动回滚
PRINT @@TRANCOUNT

 结果:

  

--没有错误自动提交

  SQL 中事务的分类

--有错误自动回滚

  SQL 中事务的分类