首页 > 其他 > 详细

保存点

时间:2021-07-03 15:41:24      阅读:12      评论:0      收藏:0      [点我收藏+]

一、什么是保存点

如果开启了一个事务,并且已经输入了很多的语句时,如果忽然发现上一条语句有问题,可以用rollback语句来让数据库状态恢复到事务执行之前的样子,然后一切再重来。因为这个问题,MySQL提出了一个保存点savepoint的概念,就是在事务对应的数据库语句中打几个点,我们调用rollback语句时能指定回滚到哪个点,而不是最初的原点。

二、定义保存点

定义保存点的语法:save point 保存点名称;

注意:如果当前事务有一个同样名称的保存点,则旧的保存点被删除,新的保存点被设置。

三、回滚到指定保存点

当想回滚到某个保存点的时候,可以使用如下语句:Rollback [work] to [savepoint] 保存点名称;

注意:

(1)work、savepoint不是必须填写的,可以省略

(2)但是rollback语句后边不跟随保存点名称的话,会直接回滚到事务执行之前的状态。

四、删除保存点

删除保存点,使用语句:Release savepoint 保存点名称

注意:

1、InnoDB 不会释放被存储在保存点之后的存储器中的行锁定。

2、如果执行 COMMIT 或 ROLLBACK,则当前事务的所有保存点被删除。

例1:直接使用rollback回滚

查询sc表所有学生数据

select *

from sc

技术分享图片

删除所有性别为女的数据

delete

from sc

where ssex=‘女‘

技术分享图片

删除以后重新查询sc表数据没有女生

select *

from sc

技术分享图片

执行rollback回滚

技术分享图片

再次查询sc表所有学生数据,恢复数据

select *

from sc

技术分享图片

例2:使用保存点回滚

操作前先查询sc表数据

技术分享图片

将李君同学的班级号修改为95032

update sc

set class =‘95032‘

where sname =‘李君‘

技术分享图片

查询李君同学的信息:

select *

from sc

where sname =‘李君‘

技术分享图片

查询所有的sc表数据:

技术分享图片

删除陆仪同学记录

delete

from sc

where sname=‘陆仪‘

技术分享图片

 删除成功后,查看sc表数据

技术分享图片

设置保存点1:test1152

SAVEPOINT test1152

技术分享图片

再添加一条记录到sc中

insert into sc values(‘105‘ , ‘赵享‘ ,‘男‘ ,‘1995-01-01‘ , ‘95033‘,200)

技术分享图片

设置保存点2:test1158

SAVEPOINT test1158

技术分享图片

技术分享图片

Rollback work to savepoint test1152

技术分享图片

回滚到指定保存点test1152后,查看sc表数据,此时发现已经sc的数据已经回滚到删除陆仪同学后,即保存点“ test1152”之后的数据不再恢复,回到保存点“ test1152”之前的数据

技术分享图片

此时还能回滚到test1158保存点吗?不能。

技术分享图片

因为test1158是在回滚点test1152之后设置的,所以回滚到前面test1152保存点后,后面的保存点就不存在了,自动被删除了。

保存点

原文:https://www.cnblogs.com/xxeleanor/p/14966088.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!