数据库事务之SavePoint

SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子。

语法:

--创建保存点
SAVEPOINT 保存点的名称;
--回滚到某个保存点
ROLLBACK [WORK] TO 保存点的名称;
--删除保存点
RELEASE SAVEPOINT 保存点名称;

操作演示:

复制代码
// 开始查询空表
mysql> select * from t_x;
Empty set
  
// 开启事务
mysql> begin;
Query OK, 0 rows affected (0.01 sec)
  
// 插入第一条数据
mysql> insert into t_x value(1, '1');
Query OK, 1 row affected (0.01 sec)
 
// 设置保存点
mysql> savepoint a1;
Query OK, 0 rows affected (0.01 sec)
  
// 此时查询一条数据
mysql> select * from t_x;
+----+------+
| id | name |
+----+------+
|  1 | 1    |
+----+------+
1 row in set (0.01 sec)
 
// 插入第二条数据
mysql> insert into t_x value(2, '2');
Query OK, 1 row affected (0.01 sec)
 
// 设置保存点2
mysql> savepoint a2;
Query OK, 0 rows affected (0.01 sec)
 
// 查询两条数据
mysql> select * from t_x;
+----+------+
| id | name |
+----+------+
|  1 | 1    |
|  2 | 2    |
+----+------+
2 rows in set (0.01 sec)
 
// 插入第三条数据
mysql> insert into t_x value(3, '3');
Query OK, 1 row affected (0.01 sec)
 
// 共三条
mysql> select * from t_x;
+----+------+
| id | name |
+----+------+
|  1 | 1    |
|  2 | 2    |
|  3 | 3    |
+----+------+
3 rows in set (0.01 sec)
 
// 回滚到第一个保存点
mysql> rollback to a1;
Query OK, 0 rows affected (0.01 sec)
 
// 此时查询,只有第一个保存点时的一条数据
mysql> select * from t_x;
+----+------+
| id | name |
+----+------+
|  1 | 1    |
+----+------+
1 row in set (0.00 sec)
 
// 尝试回滚到第二个保存点, 出错
mysql> rollback to a2;
1305 - SAVEPOINT a2 does not exist
mysql>
复制代码

 

posted @   雪山上的蒲公英  阅读(170)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2017-03-20 (二)hibernate进阶
2017-03-20 (一)Hibernate初探之——单表映射
2017-03-20 保护心灵窗口——防蓝光软件f.lux
/* 返回顶部代码 */
点击右上角即可分享
微信分享提示