MySQL事务部分回滚-回滚到指定保存点「建议收藏」

MySQL事务部分回滚-回滚到指定保存点

大家好,又见面了,我是全栈君。

我们可以在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前的状态。利用保存点可以实现只提交事务中部分处理的功能。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112123.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux系统查看网卡是否开启,查看Linux下网卡状态或 是否连接

    linux系统查看网卡是否开启,查看Linux下网卡状态或 是否连接1)通过mii-tool指令[root@localhostroot]#mii-tooleth0:negotiated100baseTx-FD,linkoketh1:nolink或[root@localhostroot]#mii-tool-veth0:negotiated100baseTx-FD,linkokproductinfo:vendor00:50:43,…

    2022年10月18日
    5
  • LockFree思想

    LockFree思想LockFree思想0x01摘要近期看一些源码,会有一些注释是LockFree。这到底啥玩意儿?之前我也不知道啊,遂赶紧上网查之,总结了一些东西作为记录,与大家分享。0x02LockFree2.1LockFree概念先上一张神图:由上图可以看出,LockFree程序必须满足三个条件:多线程共享内存不能彼此阻塞(死锁)具体来说,如果一个程序是LockFree的,则在运…

    2022年7月19日
    18
  • Java 递归、DFS、回溯

    Java 递归、DFS、回溯DFS/回溯算法如果某问题的解可以由多个步骤得到,而每个步骤都有若干种选择(这些候选方案集可能会依赖之前做出的选择),且可以用递归枚举法实现,则它的工作方式可以用解答树来描述。全排列问题输出数字1~N所能组成的所有全排列publicclassA{/***全排列**@paramargs*/staticVector<Integer>vector=newVector<>();s

    2022年7月8日
    18
  • EVE-NG模拟器教程(二)——模拟器安装

    EVE-NG模拟器教程(二)——模拟器安装上一篇文章已经介绍了如何获取EVS-NG模拟器安装包,同时我们知道EVS-NG提供两种类型的安装包,一种是OVF包,另一种是ISO镜像文件,我们可以根据不同需要选择不同类型的安装包,这里我们已经把最新的两种类型的安装包都准备好了,如下,EVE-COMM-VM-112为OVF包,EVE-20171007为ISO镜像文件:接下来就分别介绍一下这两种类型安装包的使用场景和使用方法。一、通过OVF包安装EVS-NG模拟器…

    2022年5月29日
    42
  • 框架结构和砖混结构的区别_react框架官网

    框架结构和砖混结构的区别_react框架官网实现:创建四个组件,分别是头组件,尾组件,list组件,item组件,存在于这个mvc中的。在APP.js中分别引入前三个个组件(item组件是存在于list中的,所以在list中引入item组件)在app.js中写好初始数据,在list中显示出来const{todos}=this.propsreturn(<ul>{todos.map(todo=>{return<Itemkey={

    2025年10月31日
    2
  • byte类型转换运算

    byte类型转换运算java中正数由原码表示,负数由补码表示!(符号位不取反!)(1)bytea=(byte)128 结果为-128128原码表示:00000000000000000000000010000000,取最后8位,最高位为1,表示负数。取反,加1,结果-128。(2)bytea=(byte)-129 结果为127-129补码表示:111111111111111

    2022年6月24日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号