SQL中关于隐式事务的个人理解

本文探讨了SQL中的隐式事务特性,通过实例展示了如何开启隐式事务,并解释了只有在执行语句后系统才认为事务开始。实验中,作者发现隐式事务可以在未提交时使用ROLLBACK进行数据回滚,而显式事务一旦提交则无法回滚。文章呼吁读者共同探讨和指正,以便深入理解事务管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学到事务时,练习的时候发现了,在隐式事务状态下,事务可以回滚。

例:在一个学生表里有三条数据如下

首先查看数据库中是否有事务开启

select @@TRANCOUNT   ---执行后显示如下

这个0就是显示的当前状态下无事务

然后我们开启隐式事务 set implicit_transactions on;---这时要注意的是当前状态下也是显示无事务

---这是要注意的地方,为何开启隐式事务后还是显示的0 呢?因为虽然开启了事务,但是要执行一条任何语句后系统才会认为已经开始事务了,不然没有执行语句时一直显示的是0事务。

例如,我们查询表数据,执行后,再利用select @@TRANCOUNT;--执行后显示如下,这时才是真正在隐式事务下了

这时我们往表里插入一条数据insert into student values(004,'ces',30)显示如下

我们用roolback transaction;查看是否会回滚,查询表后显示如下,证明是可以回滚的。

还要注意的是,如果在隐式事务状态下插入多条数据,然后再roolback,的话会回滚到初始状态,也就是不管你插入几条数据都会被删掉。不信的人可以做实验试试看。

那作为对比,我们也做一下在显示事务状态下利用roolback是否有用,同样的是往数据表里插入数据

begin transaction sqq--sqq为给事务取个名字

insert into student values(005,'cesff',20)

commit transaction;---执行后结果

这时我们用roolback执行后看下结果,说明这时利用roolback时无效的。我们的数据已经插入数据库中无法回滚了。

这时我好奇,想试试在显示事务中利用select @@trancount,是什么样的结果,结果显示还是无事务,说明显示事务状态下系统不显示事务数。

该实验是我的个人总结,新手,对这些不是很了解,如果有人看到此文,认为我的实验是错误的,或者对事务有别的理解请及时纠正我。也希望跟大家一起探讨。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值