我们可以在mysql事务处理过程中定义保存点(SAVEPOINT),然后回滚到指定的保存点前的状态。

定义保存点,以及回滚到指定保存点前状态的语法如下。

  1. 定义保存点---SAVEPOINT 保存点名;
  2. 回滚到指定保存点---ROLLBACK TO SAVEPOINT 保存点名:

下面演示将向表user中连续插入3条数据,在插入第2条数据的后面定义一个保存点,最后看看能否回滚到此保存点。

1、查看user表中的数据

  1. mysql> select * from user;
  2. +-----+----------+-----+------+
  3. | mid | name | scx | word |
  4. +-----+----------+-----+------+
  5. | 1 | zhangsan | 0 | NULL |
  6. | 2 | wangwu    | 1 | NULL |
  7. +-----+----------+-----+------+
  8. 2 rows in set (0.05 sec)

2、mysql事务开始

  1. mysql> BEGIN;
  2. Query OK, 0 rows affected (0.00 sec)

3、向表user中插入2条数据

  1. mysql> INSERT INTO user VALUES ('3','one','0','');
  2. Query OK, 1 row affected (0.08 sec)
  3. mysql> INSERT INTO user VALUES ('4,'two','0','');
  4. Query OK, 1 row affected (0.00 sec)
  5. mysql> select * from user;
  6. +-----+----------+-----+------+
  7. | mid | name | scx | word |
  8. +-----+----------+-----+------+
  9. | 1 | zhangsan | 0 | NULL |
  10. | 2 | wangwu    | 1 | NULL |
  11. | 3 | one            | 0 | |
  12. | 4 | two             | 0 | |
  13. +-----+----------+-----+------+
  14. 4 rows in set (0.00 sec)

4、指定保存点,保存点名为test

  1. mysql> SAVEPOINT test;
  2. Query OK, 0 rows affected (0.00 sec)

5、向表user中插入第3条数据

  1. mysql> INSERT INTO user VALUES ('5','three','0','');
  2. Query OK, 1 row affected (0.00 sec)
  3. mysql> select * from user;
  4. +-----+----------+-----+------+
  5. | mid | name | scx | word |
  6. +-----+----------+-----+------+
  7. | 1 | zhangsan | 0 | NULL |
  8. | 2 | wangwu | 1 | NULL |
  9. | 3 | one | 0 | |
  10. | 4 | two | 0 | |
  11. | 5 | three | 0 | |
  12. +-----+----------+-----+------+
  13. 5 rows in set (0.02 sec)

6、回滚到保存点test

  1. mysql> ROLLBACK TO SAVEPOINT test;
  2. Query OK, 0 rows affected (0.31 sec)
  3. mysql> select * from user;
  4. +-----+----------+-----+------+
  5. | mid | name | scx | word |
  6. +-----+----------+-----+------+
  7. | 1 | zhangsan | 0 | NULL |
  8. | 2 | wangwu    | 1 | NULL |
  9. | 3 | one            | 0 | |
  10. | 4 | two            | 0 | |
  11. +-----+----------+-----+------+
  12. 4 rows in set (0.00 sec)

我们可以看到保存点test以后插入的记录没有显示了,即成功团滚到了定义保存点test前的状态。利用保存点可以实现只提交事务中部分处理的功能。

MySQL事务部分回滚-回滚到指定保存点的更多相关文章

  1. OS X环境下SVN回滚工程到指定版本,回滚指定文件到指定版本

    1.打开命令行终端 2.cd + 工程或文件目录 3.svn update 工程目录或文件目录 -r 版本号 在Xcode中选中文件,右键选择''show in finder''(也可以用快捷键,不过 ...

  2. php+mysql实现事务回滚

    模拟条件:第一个表插入成功,但是第二个表插入失败,回滚.第一个表插入成功,第二个表插入成功,执行.第一个表插入失败,第二个表插入成功,回滚.第一个表插入失败,第二个表插入失败,回滚.以上情况都需要回滚 ...

  3. mysql有回滚,php没有回滚的说法

    mysql 事务表是有回滚的说法.当发生mysql层面的错误才会执行回滚

  4. spring 事务回滚

    1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: public method() { Dao1.save(Person1); Dao1.save( ...

  5. spring管理事务回滚

    spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: ? 1 2 3 4 5 6 7 public method() {    ...

  6. k8s-控制器deployment弹性扩容,更新镜像,回滚,DaemonSet,StatufluSet

    目录 1.控制器deployment,DaemonSet,StatufluSet 2.控制器-deployment 弹性扩容 方式1-修改配置清单 方式2-打标签 方式3-scale 更新镜像 方式1 ...

  7. 6.Git代码回滚

    1.代码修改并提交 我们已经成功地添加并提交了一个helloWorld.txt文件,现在,是时候继续工作了. 于是,我们继续修改helloWorld.txt文件,改成如下内容: $ vi helloW ...

  8. Oracle回滚段的概念,用法和规划及问题的解决

    回滚段概述  回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段可以存放多个事务的回 ...

  9. [Oracle]关于回滚段的一些转贴摘录

    ORACLE 回滚段 回滚段概述 回滚段用于存放数据修改之前的值(包括数据修改之前的位置和值).回滚段的头部包含正在使用的该回滚段事务的信息.一个事务只能使用一个回滚段来存放它的回滚信息,而一个回滚段 ...

随机推荐

  1. MySQL CentOS7 手动安装

    手动安装MySQL的目的: 1.一个服务器上可以同时装多个版本,甚至相同版本MySQL的多个实例,这种需求很常见: 2.一次初始化和配置后,可以快速复制到本服务器或其他服务器,及封装为初始MySQL的 ...

  2. 如何使用GUID硬盘分区格式安装新windows系统

    全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构.目前硬盘格式有两种,一种MBR,另一个就是GUID.一般电脑买过来是windows7以上,比如wi ...

  3. scrapy 爬虫中间件 deepth深度

    源码 class DepthMiddleware(object): def __init__(self, maxdepth, stats, verbose_stats=False, prio=1): ...

  4. unittest管理接口用例(数据分离-读取excel)

    1.简单读取 #coding=utf-8 #调用封装好的excel读取公共方法 from python_API.common.ReadExcel import ReadExcel import req ...

  5. k8s之pod与Pod控制器

    k8s中最为重要的基础资源,pod,pod controller,service pod controller类型有多种需要向控制器赋值之后使用: kubectl命令使用 kubectk get no ...

  6. 如何利用python教程判断一个 IP 在不在线?

    假设今天老板给我们一个任务,让我们判断一下一个 IP 在不在线.我们随手用 python 写一个 ping IP 的代码: import os host = input('请输入要检测的 IP : ' ...

  7. PAT甲级1004题解——并查集思想改

    题目分析:本题开始一直在考虑如何将每一个节点通过一种合适的数据结构存储起来(一对多的关系),最后发现借助并查集的思想可以用一个数组p,p[i]存放i节点的父节点,每次查询编号为i的节点属于第几层且判断 ...

  8. Please, another Queries on Array?(Codeforces Round #538 (Div. 2)F+线段树+欧拉函数+bitset)

    题目链接 传送门 题面 思路 设\(x=\prod\limits_{i=l}^{r}a_i\)=\(\prod\limits_{i=1}^{n}p_i^{c_i}\) 由欧拉函数是积性函数得: \[ ...

  9. Python3 - 基础(运算符)

    Python3-运算符 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 算术运算符 比较(关系)运算符 赋值运算符 逻辑运算符 位运算 ...

  10. 自定义注解-aop实现日志记录

    关于注解,平时接触的可不少,像是 @Controller.@Service.@Autowried 等等,不知道你是否有过这种疑惑,使用 @Service 注解的类成为我们的业务类,使用 @Contro ...