MySQL事务的SavePoint简介及操作

吾爱主题 阅读:141 2023-06-12 15:54:00 评论:0

什么是SavePoint

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

语法

定义保存点的语法如下:

?
1 SAVEPOINT 保存点的名称;

当我们想回滚到某个保存点时,可以使用下边的语句。

?
1 ROLLBACK [ WORK ] TO 保存点的名称

删除保存点

?
1 RELEASE SAVEPOINT 保存点名称;

重要操作

?
1 2 3 4 5 6 7 开启事务: begin ....DML语句.... 设置保存点: savepoint 保存点名字 ....DML语句.... 设置保存点: savepoint 保存点名字2 ....DML语句.... 回滚保存点: rollback to 保存点名字2 (此时保存点2后面操作的状态都将回滚直保存点2时样子)

注意,回滚点无法随意跳转,例如上面,如果跳转到第一个保存点名字,就无法再到保存点名字2了,当事务整体提交、回滚时,保存点也随之释放。(一个事务中可以设置多少个保存点并无限制)

演示: 接下来用mysql演示一下,思路是向mysql insert三条数据, 每次insert设置一个保存点,在第三次insert后回滚到第一个保存点看下效果:

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 // 开始查询空表 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>

到此这篇关于MySQL事务的SavePoint简介及操作的文章就介绍到这了,更多相关MySQL事务的SavePoint内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://juejin.cn/post/7185443855868100645

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容