当前位置: 首页> 教育> 就业 > SQLServer事务

SQLServer事务

时间:2025/7/11 10:27:02来源:https://blog.csdn.net/NaZiMeKiY/article/details/138294330 浏览次数:0次

一.事务

1.概念与意义

我们需要在SQLServer中将一系列操作同时进行,在进行的过程中必须要保证这一系列操作全部成功,否则就相当于是全部失败,不可能出现一部分操作成功,一部分操作失败的情况,这样的一系列操作就是事务

那么事务的作用是什么呢?在事务的这一系列操作中,如果第一个操作就失败,那么后面的操作即使成功也没有了意义,或者说那是错误混乱的数据,例如:

小明拥有五个苹果,他想要拿出八个苹果(不得小于八个苹果,否则分享失败)与朋友分享,同时他会写下日记记录与朋友分享的这件事,在这里,事务中只有两项操作,一是拿出八个苹果与朋友分享,二是写下日记,可是问题是小明只拥有五个苹果,他根本没办法完成分享八个苹果的操作,但是要是第一个分享苹果的操作失败,第二个写日记记录与朋友分享苹果的操作又成功了,这不是造假了吗?

所以,在事务中的一系列操作的关系是一荣俱荣一损俱损的

2.案例

在开始之前我们需要知道一个事务的开始需要用

begin tansaction作为开头

同时,在其中会自动定义一个全局变量为@@ERROR,其中存储的数据类型为int,存储的数据表示的是出错的代码编号,我们常用这一特性检测代码是否出错

比如:

declare @E int = 0 
--代码段1
set @E = @E + @@ERROR --检测代码段一是否报错
--代码段2
set @E = @E + @@ERROR --检测代码段二是否报错
print @E

例如:

小明有五个苹果,他想凑齐八个苹果与朋友分享,并将支出记录下来(使用check约束保证账户余额必须大于等于0)

begin transaction 
update People set Apple = Apple - 8 where Id = '001'--Pepple表中的Apple苹果个数 
insert into Record(Id,Rest,Give,ChangeTime)--Record获得与支出的记录,Rest剩余苹果个数,Give给出苹果个数,ChangeTime苹果个数改变时间 
values('001',5,8,GETDATE()) 
set @E = @E + @@ERROR 
if @E = 0 begin commit transaction print '操作成功'end
elsebegin rollback transaction print '操作失败'end

注意点:我们使用了if,else判断语句对代码是否报错进行判断,如果判断是没有报错那么就commit transaction,对其执行,并留下相应的记录,但是如果报错,这一系列事务中就有问题,那么就将rollback transaction,将其抛回,并不执行,也不会留下记录

关键字:SQLServer事务

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: