码迷,mamicode.com
首页 > 数据库 > 详细

数据库系列之T-SQL(事务)

时间:2015-02-08 23:01:03      阅读:356      评论:0      收藏:0      [点我收藏+]

标签:

什么是事务?


事务是一个不可分割的操作,要么全部执行,要么全部不执行

事务有什么用?


保证一个业务的完整执行。

怎么用事务?


3.1 事务的分类
显示事务:用BEGIN TRANSACTION明确指定事务的开始,这是最常用的事务类型。
隐性事务:通过设置SET IMPLICIT_TRANSACTIONS ON 语句,将隐性事务模式设置为打开,下一个语句自动启动一个新事务。当该事务完成时,再下一个 T-SQL 语句又将启动一个新事务。
自动提交事务:这是 SQL Server 的默认模式,它将每条单独的 T-SQL 语句视为一个事务,如果成功执行,则自动提交;如果错误,则自动回滚。

3.2 T-SQL使用下列语句来管理事务
开始事务:BEGIN TRANSACTION
提交事务:COMMIT TRANSACTION
回滚事务:ROLLBACK TRANSACTION
一旦事务提交或回滚,则事务结束。

3.3 讲解管理事务的三种操作语句
判断T-SQL语句是否有错,将使用到我们曾讲过的全局变量@@error
它只能判断当前条T-SQL语句执行是否有错(有错返回非零值 ),而事务包含很多步操作,所以我们一般需要累计错误,表明整个事务是否有错误发生。

/*--关键语句讲解--*/
BEGIN TRANSACTION 
/*--定义变量,用于累计事务执行过程中的错误--*/
DECLARE @errorSum INT 
SET @errorSum=0  --初始化为0,即无错误
/*--转账:张三的账户少1000元,李四的账户多1000元*/
UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=张三
SET @errorSum=@errorSum+@@error
UPDATE bank SET currentMoney=currentMoney+1000 WHERE customerName=李四
SET @errorSum=@errorSum+@@error  --累计是否有错误
IF @errorSum<>0  --如果有错误
  BEGIN
    print 交易失败,回滚事务
    ROLLBACK TRANSACTION 
  END  
ELSE
  BEGIN
    print 交易成功,提交事务,写入硬盘,永久的保存
    COMMIT TRANSACTION   
  END
GO
print 查看转账事务后的余额
SELECT * FROM bank  
GO
declare @errorcount int
 begin tran 
 set @errorcount = 0
 Insert into dbo.T_Customer( ID,Name,Age ) Values( 1,1,1 )
 set @errorcount =  @errorcount + @@error
 update T_User set name = null where id = 2
 set @errorcount =  @errorcount + @@error
 if @errorcount!=0 
     begin 
         print convert(nvarchar(50),@errorcount) + 回滚
         rollback 
     end 
 else 
     begin 
        print convert(nvarchar(50),@errorcount) + 提交
        commit 
     end 
 go

数据库系列之T-SQL(事务)

标签:

原文地址:http://www.cnblogs.com/cmhunter/p/4280536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!