尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
TiDB 保存点实操:长事务部分回滚避坑
TiDB 保存点实操长事务部分回滚避坑【免费下载链接】tidbTiDB is built for agentic workloads that grow unpredictably, with ACID guarantees and native support for transactions, analytics, and vector search. No data silos. No noisy neighbors. No infrastructure ceiling.项目地址: https://gitcode.com/GitHub_Trending/ti/tidb长事务执行到一半发现最后几步写入有问题。直接ROLLBACK会把前面所有正常修改一起丢掉重写一遍既费时间又容易出错。TiDB 的保存点Savepoint就是干这个的在事务中间打一个检查点只撤销检查点之后的修改事务本身继续可用改完接着COMMIT。快速上手下面这段在 TiDB 里直接可跑插入两行回退掉第二行只保留第一行。BEGIN; INSERT INTO t VALUES (1, 1); SAVEPOINT s1; -- 打一个检查点 INSERT INTO t VALUES (2, 2); ROLLBACK TO s1; -- 撤销 s1 之后的写入事务不结束 COMMIT; SELECT * FROM t;示例输出id a 1 1BEGIN是乐观事务optimistic transaction提交前不占锁提交时冲突才重试想显式悲观pessimistic写入即拿行锁把第一行换成BEGIN PESSIMISTIC即可流程完全一样。原理一句话说清保存点 给事务的内存数据库MemDB打一个检查点。回退时TiDB 把内存里的变更倒回检查点位置事务上下文同步恢复已写入的行撤销检查点之前的修改原样保留整个事务照常提交机制见pkg/executor/simple.go。保存点名称与删除规则规则讲清后后面的坑好理解。四条都来自pkg/executor/test/txn/txn_test.go的验证回退到某个保存点会删掉它之后的所有保存点只留它自己RELEASE SAVEPOINT删除指定保存点及其之后的所有保存点不回滚数据、不提交名称区分大小写ROLLBACK TO s1找不到S1同名SAVEPOINT重复执行会先删旧的同名记录再锚定到当前位置——循环里可以反复复用同一个名字。SAVEPOINT s1; SAVEPOINT s2; SAVEPOINT s3; ROLLBACK TO s2; -- s3 从此消失 ROLLBACK TO s3; -- 报错下面看排错表示例输出ERROR 1305 (42000): SAVEPOINT s3 does not existTiDB 保存点哪些场景不能用规则之外有三个场景会让你执行语句时直接被拦下先知道能少踩一半的坑。不在事务里时是空操作。autocommit 打开且没有显式BEGINSAVEPOINT不报错但什么也没记紧接着的ROLLBACK TO会报保存点不存在。悲观事务有个前置开关。会话变量tidb_constraint_check_in_place_pessimistic关闭时SAVEPOINT直接报错见pkg/executor/simple.goSET SESSION tidb_constraint_check_in_place_pessimistic ON;开启 binlog 的实例不支持。报错SAVEPOINT is not supported when binlog is enabled。TiDB 4.0 之后已不建议使用 binlog新部署一般不会碰到。另外两点要心里有数回退保存点不回收已分配的 AUTO_INCREMENT / SEQUENCE 值提交后 ID 序列里会留空洞这是预期行为临时表temporary table同样支持保存点回退规则一致参考tests/integrationtest/t/executor/executor_txn.test的临时表用例。和 MySQL 有什么不同悲观锁何时释放上面是执行层面的限制还有一个更隐蔽的差异在锁上直接影响并发会话。MySQL 在ROLLBACK TO时就释放该保存点之后持有的行锁。TiDB 的悲观事务不会锁一直留到事务COMMIT或整体ROLLBACK才统一释放见docs/design/2022-07-22-transaction-savepoint.md。也就是说长事务里回退保存点后其他会话对这些行的SELECT ... FOR UPDATE仍会等到事务结束。这不是 bug是设计选择。如果你的场景靠回退保存点后立即让别人拿到锁来推进需要重新评估事务边界而不是换数据库。排错速查上面出现的报错集中在这里对照处理即可报错原因解法ERROR 1305 ... SAVEPOINT xxx does not exist名字写错大小写或该保存点已被ROLLBACK TO/RELEASE连带删除或事务已结束核对名称大小写检查前面的回退/释放语句确认仍在事务中事务里执行了ROLLBACK/COMMIT后再回退整个事务已回滚或提交所有保存点清空保存点不能跨COMMIT使用重新BEGIN并重建SAVEPOINT is not supported when binlog is enabled实例开启了 binlog确认集群是否必须使用 binlog否则关闭该功能savepoint is not supported in pessimistic transactions when in-place constraint check is disabled悲观事务且前置会话变量关闭SET SESSION tidb_constraint_check_in_place_pessimistic ON;后重试SAVEPOINT没报错回退却报不存在当时不在显式事务中语句是空操作显式BEGIN后再创建保存点顺带说验证保存点列表无法用 SQL 查询只能靠回退是否报 1305间接判断。数据层面事务内SELECT对比回退前后的行数COMMIT后再查一遍确认落盘结果两步就够了。【免费下载链接】tidbTiDB is built for agentic workloads that grow unpredictably, with ACID guarantees and native support for transactions, analytics, and vector search. No data silos. No noisy neighbors. No infrastructure ceiling.项目地址: https://gitcode.com/GitHub_Trending/ti/tidb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

浙大数据可视化课程学习笔记

浙大数据可视化课程学习笔记

目录概述公开数据集(以下是正文)可视化——从定义到欣赏什么是数据可视化为什么需要可视化什么是好的可视化感知与认知可视化设计编码与变换可视化设计可视化的编码可视化的变换时间数据可视化时间数据可视化时空数据可视化流数据可视化时间数据可视化的…

📅 2026/9/13 12:29:46
ARIMA-SSA-LSTM组合模型:时间序列预测的完整实战指南

ARIMA-SSA-LSTM组合模型:时间序列预测的完整实战指南

简介:这是一份面向Python初学者与高校学生的ARIMA-SSA-LSTM组合时间序列预测完整实现,覆盖数据、源码与保姆级注释,适合计算机、电子信息工程、数学等专业用于课程设计、期末大作业和毕业设计。压缩包共3个文件,含两个CSV格式的时…

📅 2026/9/13 12:29:46
基于协同过滤与SVD的Steam游戏推荐系统设计与实现

基于协同过滤与SVD的Steam游戏推荐系统设计与实现

简介:这是一份基于机器学习的Steam游戏推荐系统Python源码,源于个人毕业设计,评审得分98分,代码经过完整调试与测试,可直接运行。资源面向计算机、通信、人工智能、自动化等专业的学生与从业者,适用于课程设…

📅 2026/9/13 12:29:46
MORE NEWS

更多资讯

📰

AttBiLSTM实体关系抽取实践:结构、预处理与训练评估

简介:利用AttBiLSTM进行实体关系抽取,是自然语言处理与知识图谱构建中的关键任务。面向具备一定编程基础的初学者或研究人员,资源提供了一个轻量可运行的AttBiLSTM实体关系抽取实现,将双向LSTM的上下文建模能力与注意力机制的焦点…

📰

AI教学视频制作全指南:从Kimi文案到剪映数字人稳定流程

做一个历史人物生平的教学视频,听起来不复杂,真上手一搞就翻车。平台上的AI工具一大堆,真正能落地到课堂上的没几个。我试过直接让AI生成完整视频脚本再丢进合成工具,出来的东西要么史实有硬伤,要么听起来像AI在念课本…

📰

Bokeh 序列化终章:深入 `bokeh.core.json_encoder` 与 `serialize_json` 实现原理

Bokeh 序列化终章:深入 bokeh.core.json_encoder 与 serialize_json 实现原理 【免费下载链接】bokeh Interactive Data Visualization in the browser, from Python 项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh 导读 bokeh.core.json_encoder…

📰

UnoCSS Extracting 机制完全解析:构建时按需扫描、Safelist 与 Blocklist 工程化实践

UnoCSS Extracting 机制完全解析:构建时按需扫描、Safelist 与 Blocklist 工程化实践 【免费下载链接】unocss The instant on-demand atomic CSS engine. 项目地址: https://gitcode.com/GitHub_Trending/un/unocss UnoCSS 的核心工作方式是在你的代码库中搜…

📰

NV12视频格式与GStreamer播放器开发指南

1. NV12视频格式与GStreamer播放器开发实战在多媒体开发领域,NV12是一种广泛使用的YUV色彩空间格式,特别是在视频编解码和硬件加速场景中。结合GStreamer这一强大的多媒体框架,我们可以构建高效的NV12文件播放器。本文将深入解析NV12格式的技…

📰

TiDB 保存点实操:长事务部分回滚避坑

TiDB 保存点实操:长事务部分回滚避坑 【免费下载链接】tidb TiDB is built for agentic workloads that grow unpredictably, with ACID guarantees and native support for transactions, analytics, and vector search. No data silos. No noisy neighbors. No in…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬