MySQL事务之保存点
MySQL事务之保存点
MySQL事务保存点允许将事务划分为多个较小的、更易于管理的部分,并在需要时回滚到事务中的特定点。
如,g_user有以下数据
+----+--------+------+
| id | t_name | age |
+----+--------+------+
| 1 | user1 | 1 |
| 2 | user2 | 2 |
| 3 | user03 | 3 |
| 4 | user04 | 4 |
| 5 | user05 | 5 |
| 12 | user12 | 12 |
| 13 | user13 | 13 |
| 18 | user18 | 18 |
| 22 | user22 | 22 |
| 23 | user21 | 23 |
+----+--------+------+
执行事务
START TRANSACTION;
select * from tp where id > 2 is not null for update ;
savepoint a;
update tp set age = 20 where id is not null;
rollback to a;
commit ;
再次查询g_user,发现结果和之前一模一样,因为rollback to混滚到了savepoint定义之前的状态,也就是说,savepoint 还原点
到rollback to 还原点
之间的所有sql操作全部不会生效。
⚠️ 注意
savepoint
和rollback to
必须搭配使用- 如果有需要,可以删除还原点
release savepoint还原点
既然有保存点,那么我们在写代码时如何判断是否执行还原呢?这就需要用到MySQL事务了
create procedure Clear_G_USER()
begin
DECLARE row_count int unsigned default 0;
# 开启事务
START TRANSACTION;
SAVEPOINT a;
# 统计总数
SELECT count(id) INTO @row_count from g_user where id is not null;
# 当表中数据量达到9w,转移表中数据
if @row_count > 90000 THEN
insert into g_user_bak select * from g_user;
delete from g_user where id is not null;
else
# 如果没有行被更新,则回滚
ROLLBACK TO SAVEPOINT a;
end if;
commit;
end;
本文来自博客园,作者:勤匠,转载请注明原文链接:https://www.cnblogs.com/JarryShu/articles/18391663
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现