MySQL事务的SavePoint简介及操作

 更新时间:2023年01月07日 14:51:06   作者:阿布  
SavePoint是数据库事务中的一个概念, 可以将整个事务切割为不同的小事务, 可以选择将状态回滚到某个小事务发生时的样子,本文给大家分享MySQL事务的SavePoint重要操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

什么是SavePoint

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

语法

定义保存点的语法如下:

SAVEPOINT 保存点的名称;

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

ROLLBACK [WORK] TO 保存点的名称

删除保存点

RELEASE SAVEPOINT 保存点名称;

重要操作

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

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

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

// 开始查询空表
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MYSQL分页limit速度太慢的优化方法

    MYSQL分页limit速度太慢的优化方法

    这篇文章主要介绍了MYSQL分页limit速度太慢的优化方法,需要的朋友可以参考下
    2016-05-05
  • MYSQL中Truncate的用法详解

    MYSQL中Truncate的用法详解

    这篇文章主要介绍了MYSQL中Truncate的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • MySQL 与 Elasticsearch 数据不对称问题解决办法

    MySQL 与 Elasticsearch 数据不对称问题解决办法

    这篇文章主要介绍了MySQL 与 Elasticsearch 数据不对称问题解决办法的相关资料,对于 elasticsearch 增量写入,但经常jdbc源一端的数据库可能会做数据库删除或者更新操作,这里提供解决办法,需要的朋友可以参考下
    2017-08-08
  • Mysql join联表及id自增实例解析

    Mysql join联表及id自增实例解析

    这篇文章主要介绍了Mysql join联表及id自增实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • mysql 8.0 安装配置方法教程

    mysql 8.0 安装配置方法教程

    这篇文章主要为大家分享了mysql 8.0安装配置方法图文教程,感兴趣的朋友可以参考一下
    2016-11-11
  • MYSQL导入导出sql文件简析

    MYSQL导入导出sql文件简析

    这篇文章主要介绍了MYSQL导入导出.sql文件的相关资料,内容包括MYSQL的命令行模式的设置、命令行进入MYSQL的方法、数据库导出数据库文件、从外部文件导入数据到数据库,感兴趣的小伙伴们可以参考一下
    2016-04-04
  • mysql binlog 回滚示例解析

    mysql binlog 回滚示例解析

    严格来说mysqlbinlog 不能算回滚,他只是将过去的数据修改记录 重新执行一遍,但是从结果上来看,他也算把数据恢复到任意时间点了,这篇文章主要介绍了mysql binlog回滚示例解析,需要的朋友可以参考下
    2023-08-08
  • MySql 5.6.14 Win32位免安装解压缩版配置教程

    MySql 5.6.14 Win32位免安装解压缩版配置教程

    本文给大家介绍mysql 5.6.14 win32 位免安装解压缩版配置方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,对mysql5.6.14 免安装解压缩版配置方法感兴趣的朋友一起看看吧
    2016-11-11
  • mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点实例分析

    mysql 中 replace into 与 insert into on duplicate key update 的

    这篇文章主要介绍了mysql 中 replace into 与 insert into on duplicate key update 的用法和不同点,结合实例形式分析了replace into 与 insert into on duplicate key update的功能、基本用法与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 发现mysql一个用法,比较有用

    发现mysql一个用法,比较有用

    mysql下用select实现列运算
    2008-02-02

最新评论