MySQL的savepoint简介及实例

 更新时间:2023年08月23日 09:54:28   作者:一户董  
MySQL中的保存点Savepoint是一个用于控制事务的重要工具,本文主要介绍了MySQL的savepoint简介及实例,具有一定的参考价值,感兴趣的可以了解一下

写在前面

本文看下MySQL的savepoint相关内容。

1:什么是savepoint

savepoint是事务中一个概念,允许在事务执行的过程中暂存事务执行到当前所产生的修改,这样当我们需要回滚事务时就可以选择回滚到某个保存点,而不用回滚整个事务。语法格式如下:

生成一个savepoint:
    SAVEPOINT the_savepoint_name
回滚事务到某个savepoint:
    ROLLBACK [WORK] TO [SAVEPOINT] the_savepoint_name
释放暂存点:
	RELEASE SAVEPOINT the_savepoint_name

2:实例

如下表:

mysql> select * from words where id in (1,2);
+----+------+
| id | word |
+----+------+
|  1 | aaaa |
|  2 | aaab |
+----+------+
2 rows in set (0.00 sec)

接下来我们分别对id为1,2的word都拼加字符串hi,并分别生成保存点,最终回滚到id为1的修改保存点,并提交事务,因此最终只有id=1的word会追加hi成功,操作如下:

mysql> start transaction with consistent snapshot;
Query OK, 0 rows affected (0.00 sec)
mysql> update words set word=concat(word,'hi') where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> savepoint sp_id_1; // 生成第一个暂存点
Query OK, 0 rows affected (0.00 sec)
mysql> update words set word=concat(word,'hi') where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> savepoint sp_id_2; // 生成第二个暂存点
Query OK, 0 rows affected (0.00 sec)
mysql> rollback to savepoint sp_id_1; // 回滚到第一个暂存点,则第一个暂存点之后的所有修改都会被回滚,但第一个暂存点之前的修改回被保留
Query OK, 0 rows affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.06 sec)
mysql> select * from words where id in (1,2); 
+----+--------+
| id | word   |
+----+--------+
|  1 | aaaahi |
|  2 | aaab   |
+----+--------+
2 rows in set (0.00 sec)

可以看到最终只要id=1的word值成功追加了hi

写在后面

参考文章列表

MySQL 基础 ———— SAVEPOINT 的应用 。

到此这篇关于MySQL的savepoint简介及实例的文章就介绍到这了,更多相关MySQL savepoint内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL利用profile分析慢sql详解(group left join效率高于子查询)

    MySQL利用profile分析慢sql详解(group left join效率高于子查询)

    最近因为一个用了子查询的sql语句查询很慢,严重影响了性能,所以需要进行优化,下面这篇文章主要跟大家介绍了关于MySQL利用profile分析慢sql的相关资料,文中介绍的非常详细,需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-03-03
  • MySQL数据库入门之多实例配置方法详解

    MySQL数据库入门之多实例配置方法详解

    这篇文章主要介绍了MySQL数据库入门之多实例配置方法,结合实例形式分析了MySQL数据库多实例配置相关概念、原理、操作方法与注意事项,需要的朋友可以参考下
    2020-05-05
  • MySQL 中定义和使用变量的方法

    MySQL 中定义和使用变量的方法

    MySQL 提供了多种类型的变量,以适应不同的应用场景,用户定义的变量适用于简单的会话内数据传递,局部变量适合在复杂的存储过程中使用,而会话变量则用于调整和优化数据库会话的行为,这篇文章主要介绍了MySQL 中定义和使用变量,需要的朋友可以参考下
    2024-04-04
  • clickhouse复杂时间格式的转换方式

    clickhouse复杂时间格式的转换方式

    这篇文章主要介绍了clickhouse复杂时间格式的转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • MySQL8.4实现RPM部署指南

    MySQL8.4实现RPM部署指南

    MySQL8.4是一个稳定和高性能的关系型数据库管理系统,本文主要介绍了MySQL8.4实现RPM部署指南,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • Mysql插入带有引号的字符串数据最佳实践

    Mysql插入带有引号的字符串数据最佳实践

    在MySQL中可以使用单引号或双引号来包裹字符串,下面这篇文章主要给大家介绍了关于Mysql插入带有引号的字符串数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • MySQL中字符串与Num类型拼接报错的解决方法

    MySQL中字符串与Num类型拼接报错的解决方法

    在使用mysql的时候经常要用到拼接的功能,最近的工作就遇到拼接的问题,在将字符串拼接Num类型的时候发现居然报错,下面通过这篇文章来看看解决的方法吧,有需要的朋友们可以参考借鉴。
    2016-10-10
  • 有关mysql的一些小技巧

    有关mysql的一些小技巧

    有关mysql的一些小技巧,有需要的朋友可以参考下
    2013-02-02
  • MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法

    MySQL添加外键时报错:1215 Cannot add the foreign key constraint的解决方法

    大家都知道MySQL中经常会需要创建父子表之间的约束,这个约束是需要建立在主外键基础之上的,最近在MySQL添加外键时发现了一个报错:1215 Cannot add the foreign key constraint,所以这篇文章就给大家介绍了如何解决在创建主外键约束过程中碰到的这个问题。
    2016-11-11
  • mysql忘记密码的解决方式(亲测有效)

    mysql忘记密码的解决方式(亲测有效)

    这篇文章主要介绍了mysql忘记密码的解决方式(亲测有效),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05

最新评论