我们可以在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. Flink入门 - CoGroup和Join

    /* *CoGroup */ final StreamExecutionEnvironment streamExecutionEnvironment = StreamExecutionEnvironm ...

  2. Oracle SQL函数-NLSSORT

    Syntax 用途: NLSSORT返回字符值char的排序规则键和显式或隐式指定的排序规则.排序规则键是一个用于根据指定的排序规则对char进行排序的字节字符串.排序规则键的属性是:按二进制比较由给 ...

  3. Python+Selenium+Appium对APP进行UI自动化测试

    1. 安装Python3.7版本 pythonjava的JDK java -version javac nodejs node --versionappium 若nodejs安装完毕,使用npm安装a ...

  4. python笔记39-unittest框架如何将上个接口的返回结果给下个接口适用(面试必问)

    前言 面试必问:如何将上个接口的返回结果,作为下个接口的请求入参?使用unittest框架写用例时,如何将用例a的结果,给用例b使用. unittest框架的每个用例都是独立的,测试数据共享的话,需设 ...

  5. 第9期《python3接口自动化测试》课程,6月29号开学!

    2019年 第9期<python3接口自动化测试>课程,6月29号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学 本期上课时间:6月29号-7月28号,每周六.周日晚上20:3 ...

  6. appium+python自动化64-使用Uiautomator2执行driver.keyevent()方法报错解决

    前言 未加'automationName': 'Uiautomator2'参数使用Uiautomator可以正常使用driver.keyevent()方法,使用Uiautomator2时driver. ...

  7. MERGE引擎 分表后 快速查询所有数据

    MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询.构成一个MERGE数据表结构的各成员MyISAM数据表必须具有完全一样的结构.每一个成员数据表的数据列必 ...

  8. 使用Apache commons-maths3-3.6.1.jar包,在hive上执行获取最大值的操作

    udf是对hive上的每行(单行)数据操作,现在我要实现对hive上的一列数据操作,udf函数已经满足不了我的要求了,使用udaf对hive的一列求最大值: 代码如下: package com; im ...

  9. LeetCode 446. Arithmetic Slices II - Subsequence

    原题链接在这里:https://leetcode.com/problems/arithmetic-slices-ii-subsequence/ 题目: A sequence of numbers is ...

  10. HDU 6091 - Rikka with Match | 2017 Multi-University Training Contest 5

    思路来自 某FXXL 不过复杂度咋算的.. /* HDU 6091 - Rikka with Match [ 树形DP ] | 2017 Multi-University Training Conte ...