嵌套事务及事务分类

全局变量@@trancount

  返回当前连接的活动事务数

显示事务

  用begin transaction明确指定事务的开始

  最常用的事务类型

隐性事务

  通过设置set implicit_transactions on语句,将隐性事务模式设置为打开】

  其后的T_SQL语句自动启动一个新事物

  提交或回滚一个事务后,下一个T-SQL语句又将启动一个新事物

自动提交事务

SQL sever 的默认模式

每条单独的T-SQL语句视为一个事务

 

例子

--commit 对事务数的影响 (使用嵌套事务)
print @@trancount  --在没有事务的时候查看事务数

begin tran   --开始事务


    print @@trancount   --开始事务, @@trancount将被设置为1
    begin tran  --开始第二个事务

        print @@trancount     --事务数+1

    commit tran   --提交第二个事务

    print @@trancount   --事务数减一

commit tran   --提交第一个事务,事务数-1

print @@trancount

go

--rollback(回滚\撤销)对事务的影响
print @@trancount  --在没有事务的时候查看事务数

begin tran  --开始一个事务数
    print @@trancount  --事务数+1

    begin tran  --开始第二个事务

        print @@trancount  --事务数 +1
rollback tran  --回滚事务,将事务数清0,所有活动的事务都将回滚
print @@trancount
go



 例子2:

--【1】显示事务 begin tran
use E_Market
go
set nocount on   --不显示受影响的行数
--设置显示事务模式
set implicit_transactions off  --关闭隐式事务
go 
print'开始事务数' + cast(@@trancount as varchar(10))
go
if exists(select * from sysobjects where name='table1')

drop table table1
go
create table table1
(
    coll int
)

--向表中插入一条数据
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))
/*
结果为:
开始事务数0
使用显示事务数:0
显示事务的个数:1
显示事务提交后事务的个数是:0
*/

--[2]设置隐式事务模式
print '设置隐式事务模式'
set implicit_transactions on
--未标识事务的开始
insert into table1 values(2)
print '使用事务数:' + cast(@@trancount as varchar(10))
commit tran  --提交事务,如果不提交那么将在执行下面的任意一条语句中自动开启下一个事务
/*所有的create, truncate table, insert, select, alter table, crant, update,所有的drop,rovoke,delete等*/

print '显示提交后事务的个数是:' + cast(@@trancount as varchar(10))

--自动提交事务
--当设置implicit_transaction off(设置成显示模式后)就恢复成了自动提交模式
set implicit_transactions off  --关闭隐式事务,恢复成了显示模式,出现自动提交模式
insert into table1 values(3)   --没有错误自动提交
print '使用事务数:' + cast(@@trancount as varchar(10))

insert into table1 values(3,5)   --出现错误自动回滚
print '使用事务数:' + cast(@@trancount as varchar(10))

 

posted @ 2019-05-16 22:26  我是神奇的小白  阅读(371)  评论(0编辑  收藏  举报