事务之保存点(savepoint)

Java中事务保存点(Savepoint) 在Java中,通常使用JDBC API来管理数据库的事务。保存点是在一个事务中设置的一个标记,它记录了当前事务的状态。如果需要在事务中回滚到某个特定的点,而不是回滚整个事务,就可以使用保存点。 阅读详情
AI摘要

本文深入讲解MySQL数据库中保存点的使用方法,包括如何定义保存点、回滚到指定保存点及删除保存点。通过转账场景实例,展示了保存点在错误处理和事务控制中的重要作用。

如果开启一个事务,已经写了很多语句,突然发现执行完上一语句时发现语句写错了。你只好使用rollback语句让数据库恢复到事务开启之前的状态。以前写完的语句也需要重新执行。所以mysql数据库的作者提出了保存点(savepoint)的概念。开启事务后在执行语句后面打几个点,我们调用rollback语句就会回滚到指定的点。而不是回到事务执行之前的样子。

定义保存点的语法如下:

SAVEPOINT 保存点的名称;

当我们想回滚到某个保存点时,可以使用下边的语句。(WORK和SAVEPOINT可有可无)

ROLLBACK [WORK] TO [SAVEPOINT]

不过如果rollback后面不跟保存点的名称,事务就会回滚到执行之前的状态。

如果想删除某个保存点可以使用下面的语句。

RELEASE SAVEPOINT 保存点名称;

下面举个例子来说明保存点的用法。张三向猫爷转账2块钱。在执行完扣除张三2块钱处打一个保存点。

select * from account;
idnamebalance
1狗哥11
2猫爷2
3张三10

 

 

 

 

 

#开启事务
begin;

update account set balance =balance-2 where id=3;


savepoint s1; #一个保存点


select * from account;

idnamebalance
1狗哥11
2猫爷2
3张三8

 

 

 

 

 

 UPDATE account SET balance = balance + 1 WHERE id = 2; #更新错了

回滚事务到保存点;

rollback to s1; #回滚到保存点


select * from account;
idnamebalance
1狗哥11
2猫爷2
3张三10
聊聊数据库中的 savepoint 故事要从全局二级索引开始讲起。 当我们构建了一个全局二级索引之后,一条逻辑上的数据插入,就会变成两条物理上的数据插入:一条插入到主表,另一条插入到索引表。为了保证主表和索引表数据的一致性,我们往往需要开启分布式事务,再并行地插入两条数据。如果其中一条数据插入失败了,比如索引上出现了唯一键冲突,但主表的数据已经插了进去,怎么办呢? 阅读详情

相关推荐

Oracle数据库中SAVEPOINT和ROLLBACK介绍

SAVEPOINT和ROLLBACK是事务处理中非常重要的两个概念,它们允许你在事务执行过程中进行部分回滚

zxrhhm的博客 1273

savepoint存储与恢复流程

​ 除了检查点(checkpoint)外,Flink 还提供了另一个非常独特的镜像保存功能——保存点(Savepoint)。​ 从名称就可以看出,这也是一个存盘的备份,它的原理和算法与检查点完全相同,只是多了一些额外的元数据。事实上,保存点就是通过检查点的机制来创建流式作业状态的一致性镜像(consistent image)的。​ 保存点中的状态快照,是以算子 ID 和状态名称组织起来的,相当于一个键值对。从保存点启动应用程序时,Flink 会将保存点的状态数据重新分配给相应的算子任务。

qq_18379607的博客 1081

别再为倍福EL6021/EL6022的RS485接线头疼了!手把手教你硬件跳线与软件配置(附Modbus RTU主站例程)

本文详细解析了倍福EL6021/EL6022模块的RS485硬件跳线与软件配置方法,包括Modbus RTU主站编程实战。从端子定义、跳线操作到TwinCAT 3环境设置,提供完整的通信例程和故障排查技巧,帮助工程师快速解决工业现场通信问题。

weixin_30634661的博客 589

Flink详解系列之八--Checkpoint和Savepoint

当一个算子接收到第一个输入流的快照barrier n时,它不能继续处理该流的其他数据,而是需要等待接收到最后一个流的barrier n,才可以生成算子的状态快照和发送挂起的输出记录,然后发送快照barrier n。savepoint是使用检查点机制创建的,作业执行状态的全局镜像,可用于flink的停止与恢复,升级等。由于有些算子是有状态的,有些算子是无状态的,实际上只要给有状态的算子添加算子ID就可以,但很多人并不太清楚哪些算子是有状态的,哪些是无状态的,所以,实际操作中,尽量给每个算子手动配置算子ID。

wr_java的博客 1528

基于ROS下的安卓手机图像和IMU跑ORB-SLAM3

接之前文章继续,手上没有现成的单目+IMU硬件,但是安卓手机几乎人人都有。因此,本文讲下如何用手机跑ORB-SLAM3的Mono和Mono_Inertial。 1. 手机与PC通信 基于ROS下的信息发布和订阅,手机和PC在一个局域网下进行信息(image和IMU)传输。 手机APK参考了github上的2个开源Android_Camera-IMU和android_ros_sensors,基于ros_java生成安卓APP,下载安装任一个APP到安卓手机,界面分别是这样: 手机和PC连一个无

h_372101的博客 1万+

ctx->cvdl->cuvidGetDecoderCaps(&ctx->caps8) failed -> CUDA_ERROR_DEINITIALIZED: driver shutting down

ffplay -vcodec h264_cuvid sample_720p-2.h264 [quantum6@freeswitch freeswitch]$ ffplay -vcodec h264_cuvid sample_720p-2.h264 ffplay version 4.3.1 Copyright (c) 2003-2020 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44) .

柳鲲鹏 2404

事务中savepoint(保存点)的使用

savepoint概念: 首先要知道savepoint就是为回退做的,savepoint的个数没有限制,savepoint和虚拟机中快照类似. savepoint是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。 当执行rollback时,通过指定保存点可以回退到指定的点。回退事务的几个重要操作1.设置保存点 savepoint a2.取消保存点a...

weixin_30248399的博客 2056

基于Python的异步爬虫实战:高效抓取同花顺概念板块数据

本文将详细介绍如何使用Python最新异步爬虫技术(requests-html+aiohttp+selenium)高效抓取同花顺概念板块数据。内容涵盖:反爬机制破解、动态页面渲染处理、数据解析存储等完整流程,并提供可复用的高性能爬虫代码实现。高性能:异步并发处理,QPS可达50+高可用:完善的异常处理机制可扩展:支持分布式部署增加历史数据回溯功能集成机器学习识别验证码构建实时数据推送系统。

2201_76125261的博客 1535

YugabyteDB中的事务保存点(SAVEPOINT)详解

在现代分布式数据库系统中,事务管理一直是核心挑战之一。YugabyteDB作为一款PostgreSQL兼容的分布式SQL数据库,不仅继承了PostgreSQL强大的事务能力,还通过创新的架构设计解决了分布式环境下的ACID事务问题。其中,SAVEPOINT(保存点)功能为复杂事务处理提供了精细的控制能力。 > ???? **你知道吗?** 在传统单机数据库中实现保存点相对简单,但在分布式环境中,确保...

gitblog_00516的博客 324

2026年中科曙光嵌入式笔试试卷带答案

2026年中科曙光嵌入式笔试试卷涵盖数字电路、总线协议、时序分析、存储原理及硬件寄存器操作等核心知识点。单选题聚焦SPI/I2C差异、建立/保持时间、ADC作用等基础概念;多选题考察时序约束、非易失存储、BMC功能等综合应用;判断题强化对关键术语的理解;填空题考查基本术语记忆;简答题要求掌握SPI与I2C对比、时序违例后果及BMC管理机制。试题紧扣嵌入式系统开发实际,突出接口协议、时序设计与硬件交互能力,是嵌入式岗位选拔的重要依据。

Open 21

vLLM显存逆向计算:如何得到最优gpu-memory-utilization参数

本文提出了一种**逆向工程**的思路:基于vLLM显存占用的底层机制,通过精确计算模型权重、KV缓存、激活内存等各组件的显存需求,**倒推出最优的gpu-memory-utilization参数**。这种方法让我们能够在部署前就准确预估资源需求,实现一次配置、稳定运行。本文我们将从vLLM显存计算的核心原理出发,构建完整的倒推计算框架和源码,并通过大量实验验证其准确性(会有误差,但基本可以直接使用)。

羊城迷鹿的博客 1947

java中使用savepoint_事务中savepoint(保存点)的使用

savepoint概念:首先要知道savepoint就是为回退做的,savepoint的个数没有限制,savepoint和虚拟机中快照类似. savepoint是事务中的一点。用于取消部分事务,当结束事务时,会自动的删除该事务中所定义的所有保存点。当执行rollback时,通过指定保存点可以回退到指定的点。回退事务的几个重要操作1.设置保存点 savepoint a2.取消保存点a之后事务 rol...

weixin_39517859的博客 1371

拼多多小球直径轨迹重合验证码识别

本文分析了拼多多新型验证码的实现原理与破解思路。该验证码采用Canvas绘制小球弹跳轨迹验证,主要难点在于参数还原和轨迹计算。作者通过逆向工程提取了包括弹跳段数、振幅、旋转参数等关键配置(存储在config.json),并利用Python成功模拟了验证过程。核心算法将滑块值映射为0-1区间,通过三次变换计算小球位置,最终采用斜率截距最小值比对完成验证。整个过程分为静态初始化、核心计算和动态渲染三个阶段,其中干扰元素不影响核心验证逻辑。该研究仅用于技术学习,强调严禁任何违法行为。

码王吴彦祖的博客 1329

Oracle事务之rollback回滚和savepoint保存点以及commit提交

一、savepoint、rollback 保存点可以回退到事务的一部分,我们在操作数据库的过程中可以对事务分隔为几个部分,在操作失误的时候就可以回滚到某个点即可。 a、我们现在新建一张表empt: create table empt( "id" number, "text" varchar2(20) ); b、插入第一条数据; insert into em...

容雅王子的博客 3241

出现 Error occurred during initialization of VMagent library failed Agent OnLoad 解决方法

ntelliJ IDEA启动时出现"Agent library failed to load"错误,主要原因是JVM代理加载失败。解决方法包括:1)完全卸载并删除用户目录下的JetBrains配置文件;2)检查并修改idea64.exe.vmoptions文件,确保路径正确并删除不必要的-javaagent参数;

码农研究僧的博客 2482

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Spring 事务保存点savepoint

Savepoint savepoint=null;保存点,记录操作位置,之后可以回滚到指定位置 try{ //获得链接 conn=。。。。 //开启事务 conn.setAutoCommit(false); A事务B事务 savepoint=conn.setpoint(); C事务 D事务 //提交事务 conn.commit(); ...

weixin_30882895的博客 1367

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

DM8的事务回滚与保存点(Savepoint)学习

如果在前面的步骤成功执行后,后面的某一步骤失败,我们通常不希望完全回滚整个事务,而是希望回滚到出错点之前的状态,保留已成功的操作,以便进行其他处理。目的是理解在复杂业务逻辑中,如何利用保存点进行错误处理和流程控制,避免一个操作失败导致整个大事务全部回滚,从而提升应用的健壮性和开发灵活性。库存的扣除和订单主记录的创建这些已经成功的操作得到了保留,只有失败的订单明细插入操作被撤销。-- 没有数据,因为失败的操作被回滚了。-- 发现错误后,回滚到保存点 sp2,即撤销失败的订单明细插入,但保留主订单和库存更新。

qq_38733647的博客 604

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

PostgreSQL保存点/子事务(SAVEPOINT)你想要了解的那些事

PostgreSQL是当今最广泛应用的数据库系统(DBMS)之一。除了由于其具有优秀的性能、良好的兼容性之外,其完全开源的特性、完整的事务能力也是其中重要的原因。PostgreSQL支持完整的ACID特性,支持RC/RR/SSI等隔离级别。 PostgreSQL除了基础的事务能力之外,还提供了子事务的能力,也就是保存点(SAVEPOINT)的功能。保存点功能能够支持在发生错误时自动回滚到上一保存点,而无需回滚整个事务;或者在任意时刻回滚到某一特定保存点的状态,而放弃事务中的部分修改。

u013970710的博客 3740

事务操作之savePoint保存点

某转账业务有 A B C D 四个事务。 需求:AB(必须),CD(可选)。 代码实现如下: Connection conn = null; Savepoint savepoint = null;  //保存点,记录操作的当前位置,之后可以回滚到指定的位置。(可以回滚一部分) try{   //1 获得连接   conn = ...;   //2 开启事务   conn

striner的博客 2293

仓颉语言 std.database.sql 事务控制实战:事务提交、回滚与保存点(Savepoint)详解

本文以仓颉(Cangjie)编程语言标准库 `std.database.sql` 的官方事务控制示例([db_transactions.md](https://link.gitcode.com/i/7eeeddd08654bde143a96425da04fe78))为骨架,系统讲解在仓颉中如何通过 `Connection.createTransaction()` 获取 `Transaction`

gitblog_00046的博客 522

如何管理事务保存点_SAVEPOINT与ROLLBACK TO局部回滚

SAVEPOINT用于局部回滚,仅在支持的数据库(如PostgreSQL、MySQL InnoDB、SQLite、SQL Server)中有效;sqlite 支持;—— 如果之后还要用同名点,必须先 RELEASE,否则 MySQL 报 ERROR 1305 (42000): SAVEPOINT sp_user_insert does not exist(其实是已存在,但它拒绝覆盖)嵌套 SAVEPOINT 容易踩的坑:名字冲突和隐式释放多个 SAVEPOINT 可以嵌套,但名字重复时行为因库而异。

zhoutongsheng的博客 231

(37)课56--58:建立保存点 SAVEPOINT spA,回滚(至保存点) ROLLBACK (to spA)及综合举例。事务四大特性 ACID,脏读、不可重复读,幻读,

(116)(117)(118)

zhangzhangkeji的博客 174

事务保存点savepoint

一、 转载于:https://www.cnblogs.com/wmqiang/p/11618714.html

weixin_30563319的博客 433

Oracle中事务的提交commit和回滚rollback及保存点savepoint

根据上篇BLOG中创建的表,学生信息表studentinfo请参考上篇文章 INSERT INTO STUDENTINFO VALUES('017','SMITH',0,'19-9月-88','北京市怀柔区'); INSERT INTO STUDENTINFO VALUES('018','SMITH LEE',0,'25-11月-86','上海市松江区'); --SAVEPOINT sp...

w_band的专栏 1349

mysql savepoint语法_SAVEPOINT和ROLLBACK TO SAVEPOINT语法

【赛迪网-IT技术报道】SAVEPOINT和ROLLBACK TO SAVEPOINT语法:SAVEPOINT identifierROLLBACK [WORK] TO SAVEPOINT identifierRELEASE SAVEPOINT identifierInnoDB支持SQL语句SAVEPOINT, ROLLBACK TO SAVEPOINT, RELEASE SAVEPOINT和自选...

weixin_42312523的博客 786

MySQL事务嵌套如何正确处理_理解savepoint保存点使用技巧

唯一合法替代是SAVEPOINT,用于事务内分段回滚,需注意命名唯一、作用域及引擎兼容性。唯一合法的“嵌套”替代方案是 SAVEPOINTSAVEPOINT 不开启新事务,只在当前事务内设标记点每个 SAVEPOINT 名必须唯一,重复名会被覆盖(不是报错)事务结束(COMMIT 或 ROLLBACK)后所有 SAVEPOINT 自动失效用 SAVEPOINT 实现逻辑分段回滚:语法与常见误用比如批量导入用户数据时,想对每个用户的子操作(插入主表 + 关联权限)做独立回滚,但整体仍属一个事务。

maqr_110的博客 196
上一篇: Leetcode1431. 拥有最多糖果的孩子 --hammring
下一篇: Error:field larger than field limit(131072)解决方法
hammring
博客等级 码龄12年 19粉丝 87原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值