标签归档:sql事务

mssql sqlserver “显式事务处理”简介


摘要:
下文讲述sqlserver 中显式事务处理,如下所示:
实验环境:sql server 2008 R2


显式事务:采用sql脚本明确的指定事务的开始和结束标志。

显式事务中:
使用begin transaction 表示事务开始
使用commit transaction 表示事务成功并提交
使用rollback transaction 表示事务回滚

显式事务属性的生命周期:
当我们采用begin transaction 开始定义一个事务时,此时事务为”显式事务”,
当”显式事务”提交或回滚后,显式事务属性消失,此时如果不begin tran 开始事务,
那么sql事务将会回到系统默认的事务类型。



显式事务举例说明:

   begin try
    begin transaction 
       /*sql脚本*/
    commit transaction  --提交事务
   end try 
   begin catch 
     select @@error as [错误号]
     rollback transaction ---回滚事务
   end catch 

mssql sqlserver 自动事务处理模式简介


摘要:
下文介绍sqlserver中的自动事务处理模式
实验环境:sql server 2008 R2


自动事务处理:
自动事务处理是sql引擎中的自动事务管理模式。
一条sql语句要么执行失败,要么执行成功。
自动事务如何产生:
当我们没有显式或隐式指定事务模式时,则数据库引擎会自动产生自动事务模式。


例:

  create table [maomao365]
  (keyId int not  null ,info varchar(30) not null )
go

insert into [maomao365]
 (keyId,info )values(1,'sqlblog')

insert into [maomao365]
 (keyId,info )values(null,'sqlblog')
insert into [maomao365]
 (keyId,info )values(3,'sqlblog')

/*
  以上三条sql语句同时运行,但是没有显示指定事务,
 sql引擎自动将三条语句独自进行自动事务处理,
分别生成三个事务,所以第一条插入语句执行成功
第二条语句执行失败,进行了回滚操作,程序退出
由于程序发生异常,第三条语句没有运行
*/

 select keyId,info from [maomao365]
go

truncate table [maomao365]
drop       table [maomao365]
go

mssql sqlserver sql脚本中事务回滚的四种方法分享


摘要:
下文通过举例的方式,分享在sql脚本编写中,显示和自动事务回滚的处理方法,如下所示:
实验环境:sql server 2008 R2


例:

   ---数据表准备:
     create table test
	 (keyId int identity,info varchar(100))
     go
	 
	---方法1:使用 rollback tran 回滚对应的事务
      begin tran  
	    insert into test (info) values
        ('www.maomao365.com'),
		('sql教程'),
		('sql专用博客')
       
	   rollback tran    ---回滚事务中的所有语句
	   return;

    
	---方法2:通过 SET XACT_ABORT属性开启,当事务中任何脚本出现错误,则所有脚本会自动回滚,如下所示
	 SET XACT_ABORT ON
      begin tran  
	    insert into test (info) values('www.maomao365.com')
		insert into test (info) values('sql教程'234)
		insert into test (info) values('sql专用博客')
       
	   commit tran     
	   return;
 
    ---方法3:使用try catch捕捉异常,然后自动回滚,如下所示
	 
     Begin Try
        begin tran  
	    insert into test (info) values('www.maomao365.com')
		insert into test (info) values('sql教程'234)
		insert into test (info) values('sql专用博客')
       
	   commit tran 
    End Try
    Begin Catch
    Rollback TransAction
    End Catch
 

    ---方法4:使用系统变量获取错误信息,然后通过goto标签跳转执行回滚事务
	    begin tran  
	    insert into test (info) values('www.maomao365.com') 
		   if @@error <>0 begin goto err; end
		insert into test (info) values('sql教程'234)
		   if @@error <>0 begin goto err; end
		insert into test (info) values('sql专用博客')
		   if @@error <>0 begin goto err; end
       
	   commit tran     
	   return;

	   err:
	   rollback tran
	   return;

    go
	truncate table test
	drop     table test