一、rollback保存点的锁释放

在保存点后如果做了操作造成了行锁,是否rollback回来后还会保留操作时引起的行锁?

设计:在保存点后进行delete操作,查看rollback之前和之后的事务锁变化。

mysql> start transaction;

Query OK, 0 rows affected (0.00 sec)

mysql> savepoint a;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t5;   ###保存点状态

+------+------+

| id  | num  |

+------+------+

|   2 | aa   |

|   3 | c    |

+------+------+

2 rows in set (0.00 sec)

mysql> delete from t5 where id=2; ###更改操作

Query OK, 1 row affected (0.00 sec)

mysql> rollback to a;      ####回滚到保存点时

Query OK, 0 rows affected (0.00 sec)

mysql> select * from t5;  ###rollback后数据还原到事务保存点状态,即撤销delete操作

+------+------+

| id  | num  |

+------+------+

|   2 | aa   |

|   3 | c    |

+------+------+

2 rows in set (0.00 sec)

show engine innodb status;

rollback之前

------------

TRANSACTIONS

------------

Trx id counter 18044

Purge done for trx's n:o < 18041 undon:o < 0 state: running but idle

History list length 566

LIST OF TRANSACTIONS FOR EACH SESSION:

---TRANSACTION 18037, not started

MySQL thread id 272, OS thread handle0x7f61312b0700, query id 79768 localhost root init

show engine innodb status

---TRANSACTION 18039, ACTIVE 17 sec

2 lock struct(s), heap size 360, 3 rowlock(s), undo log entries 1 ###delete造成锁形成

MySQL thread id 274, OS thread handle0x7f60bd82d700, query id 79767 localhost root cleaning up

Trx read view will not see trx with id>= 18040, sees < 18040

Rollback之后

------------

TRANSACTIONS

------------

Trx id counter 18046

Purge done for trx's n:o < 18045 undon:o < 0 state: running but idle

History list length 567

LIST OF TRANSACTIONS FOR EACH SESSION:

---TRANSACTION 18037, not started

MySQL thread id 272, OS thread handle0x7f61312b0700, query id 79771 localhost root init

show engine innodb status

---TRANSACTION 18045, ACTIVE 5 sec

MySQL thread id 274, OS thread handle0x7f60bd82d700, query id 79770 localhost root cleaning up

Trx read view will not see trx with id>= 18046, sees < 18046

###锁已经被释放

结论:

Rollback释放了savepoint后delete操作的行锁。

二、回滚保存点只撤销本事务保存点后的操作

回滚保存点后,是否撤销了保存点后其他的事务对数据进行修改?

设计:设置保存点,事务二对no_index表进行update操作,然后回滚保存点,比较回滚前后数据变化。

set tx_isolation='read_committed';

事务一

mysql> start transaction ;

Query OK, 0 rows affected (0.00 sec)

mysql> savepoint modi;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from no_index; ###事务二对no_index表操作前

+------+------+------+

| id  | fir  | sec  |

+------+------+------+

|   1 | aa   | bb   |

|   3 | b    | c    |

|   4 | c    | d    |

|   5 | e    | f    |

|   7 | e    | q    |

|   8 | cd   | qq   |

|  11 | a    | b    |

+------+------+------+

7 rows in set (0.00 sec)

mysql> select * from no_index;  ###事务二对no_index表操作后

+------+------+------+

| id  | fir  | sec  |

+------+------+------+

|   1 | aa   | b    |

|   3 | b    | c    |

|   4 | c    | d    |

|   5 | e    | f    |

|   7 | e    | q    |

|   8 | cd   | qq   |

|  11 | a    | b    |

+------+------+------+

7 rows in set (0.00 sec)

mysql> rollback to modi;

Query OK, 0 rows affected (0.00 sec)

mysql> select * from no_index; ####回滚到保存点后数据没有发生变化

+------+------+------+

| id  | fir  | sec  |

+------+------+------+

|   1 | aa   | b    |

|   3 | b    | c    |

|   4 | c    | d    |

|   5 | e    | f    |

|   7 | e    | q    |

|   8 | cd   | qq   |

|  11 | a    | b    |

+------+------+------+

7 rows in set (0.00 sec)

事务二

mysql> update no_index set sec='b' whereid='1'; ###对表进行update操作

Query OK, 1 row affected (0.01 sec)

Rows matched: 1  Changed: 1 Warnings: 0

mysql> rollback to modi;       ###可以看出保存点依附于事务中

ERROR 1305 (42000): SAVEPOINT modi does notexist

结论:

1.保存点回滚只是撤销本事务保存点后的操作,对保存点后其他事务的操作不凑效。

2.保存点的声明和定义只在本事务中凑效,而且当本事务commit或rollback后,保存点也不复存在。

转载于:https://blog.51cto.com/10574662/1688446

回滚保存点后究竟发生了什么?相关推荐

  1. 多方法调用 一个出错 集体回滚_一个@Transaction哪里来这么多坑?

    前言 在之前的文章中已经对Spring中的事务做了详细的分析了,这篇文章我们来聊一聊平常工作时使用事务可能出现的一些问题(本文主要针对使用@Transactional进行事务管理的方式进行讨论)以及对 ...

  2. Spring嵌套事务是怎么回滚的?

    事务的传播机制 多数据源的切换问题 更深入理解 Spring 事务. 用户注册完成后,需要给该用户登记一门PUA必修课,并更新该门课的登记用户数. 为此,我添加了两个表. 课程表 course,记录课 ...

  3. mysql 事务 回滚 原理_mysql 事务的实现原理

    一. 开篇 相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等.今天想跟大家一起研究 ...

  4. Mysql事务回滚机制与原理

    Mysql事务回滚机制与原理 文章目录 Mysql事务回滚机制与原理 一.事务回滚机制 二.使用到的技术讨论 三.redo log和undo log介绍 3.1 redo log 3.2 undo l ...

  5. 每日一博 - 常见的Spring事务失效事务不回滚案例集锦

    文章目录 事务不生效 方法内部调用 修复方法一 : [新加一个Service方法] 修复方法二:[在该Service类中注入自己] 修复方法三:[通过AopContent类]<---- 推荐 访 ...

  6. sql server 事务_如何使用显式SQL Server事务回滚

    sql server 事务 In this article, we will explore the process of rollback an explicit SQL Server transa ...

  7. 详解spring事务失效和回滚失败的场景

    详解spring事务失效和回滚失败的场景 详解spring事务失效和回滚失败的场景 前言 一 .事务不生效 1.访问权限问题 2. 方法用final修饰 3.方法的内部调用 3.1 新加一个Servi ...

  8. service层的方法上使用@Transactional注解,程序发生异常没有回滚

    场景:程序在运行过程中发生了异常,虽然使用了@Transactional对方法进行注解,但是事务并没有回滚. 解决方案:经检查发现,在service层的方法中使用了try...catch关键字,导致发 ...

  9. 【java基础】子线程任务发生异常,主线程事务如何回滚?

    文章目录 一.提出问题 二.主线程与子线程 三.线程池 四.异常的捕获 五.事务的回滚 一.提出问题 最近有一位朋友问了我这样一个问题,问题的截图如下: 这个问题问的相对比较笼统,我来稍微详细的描述下 ...

最新文章

  1. freebasic 编译linux,免费BASIC编译器下载
  2. 使用Silverlight 2实现水中倒影效果
  3. 创建安卓app的30个经验教训
  4. 思科查看服务器启动配置文件,启动配置检查UCS
  5. 港中文开源 | 融合视频目标检测与单目标、多目标跟踪
  6. 开源xen对比_女实习生在Xen Project上摇摆开源
  7. 转转集团Q4手机行情:二手市场iPhone交易量今年以来首次“反弹”
  8. 稳定服务器头像,WordPress 修复 Gravatar 头像稳定服务器地址
  9. [已解决] org.hibernate.HibernateException:未配置CurrentSessionContext
  10. spss clementine Twostep Cluster(两步聚类 二阶聚类)
  11. centos刻录工具_CentOS7.0 U盘刻录工具正式版
  12. oracle数据库还原指令,oracle中备份和还原数据库的命令汇总
  13. OpenNLP初尝试--自然语言处理
  14. link标签的主要用法
  15. base64编码计算机网络,什么是Base64(Base64)?
  16. python中缺省值处理函数DataFrame.fillna()
  17. DataMining——孤立点:落在高于Q1 或低于Q3 的1.5IQR的位置
  18. 关于混入(minxs)的使用
  19. 正点原子IIC例程讲解笔记(三)——24cxx.c中函数理解
  20. 心理学 | (1)焦虑症和恐惧症--一种认知的观点

热门文章

  1. mysql YEARWEEK(date[,mode]) 函数
  2. 北京5万份数字人民币红包来袭,系“冬奥试点”首次面向公众测试!
  3. 关于测试网 gladios 节点公开部署
  4. 最新热点资讯:多条国际客运航线复航,涉及欧洲、亚洲多个城市
  5. 计算机网络配置与应用教学设计,计算机网络与应用教学设计
  6. 《Linux命令行大全》学习笔记1——学习 Shell
  7. 暗通道先验算法matlab
  8. Google Earth Engine(GEE) 01-中输入提示快捷键Ctrl+space无法使用的问题
  9. Time Series Forecasting Using GRU Neural Network with Multi-lag After Decomposition
  10. ArcGIS总结——矢量数据分析之网络分析(上)