标签:
事务是一个不可分割的操作,要么全部执行,要么全部不执行
保证一个业务的完整执行。
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
标签:
原文地址:http://www.cnblogs.com/cmhunter/p/4280536.html