mysql事务中宕机_事务执行一半,业务系统宕机,数据库的数据会怎样?
业务系统提交了一个数据库dml指令,在尚未进行提交时,系统宕机了。那么数据库的数据会是修改前的,还是修改后的?数据库中的连接是否会断开,数据是否会被锁定?带着这些疑问,我们做的如下测试:
1、在数据库中插入一条数据
此时,数据库中用户密码为:test
2、查看数据库的连接
show FULL PROCESSLIST;
此时存在一个连接,该连接时navicat的客户端连接
3、查看数据库的事务
SELECT * FROM information_schema.INNODB_TRX;
不存在事务
4、执行业务系统中的修改语句
@Transactional(rollbackFor = Exception.class)
public void update(){
UserEntity userEntity = new UserEntity();
userEntity.setId(2);
//修改数据库的用户密码为 test112
userEntity.setPassword("test112");
userMapper.updateById(userEntity);
}
@Transactional(rollbackFor = Exception.class)
public void shutdown(){
update();
try {
//模拟长事务,方便我们测试系统宕机
Thread.sleep(5000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Test
public void testShutDown(){
userService.shutdown();
}
执行testShutDown方法
5、再次查看数据库的连接
多了很多连接,这是因为我在代码中使用了数据库连接池,默认创建了5个连接
6、再次查看数据库的事务
此时有一个正在运行中的事务,且锁住了一行
7、我们直接kill掉业务系统的进程
taskkill /f /pid 13964
8、查看数据库连接
数据库连接已经关闭
9、查看数据库事务
事务已经没有了
10、查看数据
数据未改变
--------------------------------------------
以上测试在windows 10机器上进行测试的,mysql版本5.7.30 社区版,使用了druid连接池
在centos 7.5上,其他条件不变,得到和上面一致结果
在windows10上,使用jdbc连接,不使用连接池,其他条件不变,得到和上面有一致结果
结论:当系统提交了数据库dml指令,但未执行commit,系统宕机了。此时,数据库的数据不会改变,数据库连接会被清除,数据库事务也会被清除,也不会锁定数据
mysql事务中宕机_事务执行一半,业务系统宕机,数据库的数据会怎样?相关推荐
- Spring 如何在一个事务中开启另一个事务?
Spring项目,需要在一个事务中开启另一个事务. 上面提到的情景可能不常见,但是还是会有的,一旦遇到,如果业务比较复杂,就会很麻烦,但是还是有解决的方案的,比如将一个service方法拆成两个方法, ...
- spring中怎么让事物提交_Spring怎么在一个事务中开启另一个事务
点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:Mazin my.oschina.net/u/3441184/blog/893628 ...
- mysql事务保证幂等_事务与一致性:刚性or柔性
转发自 https://cloud.tencent.com/developer/article/1038871 在高并发场景下,分布式储存和处理已经是常用手段.但分布式的结构势必会带来"不一 ...
- mysql innodb事务中 出现_MySql InnoDB事务死锁问题
这篇博客的文章内容发生于某天晚上服务端日志报了一大堆 Deadlock found when trying to get lock; try restarting transaction,当时通过字面 ...
- mysql事务四个特性_事务的四个特性
事务的四个特性 在工作中,经常会接触到事务这个概念.涉及到事务,大家首先想到的就是事务的四个特性:ACID.抽空总结和梳理了一下事务的这四个特性. 1.原子性(Atomicity) 1.1什么是原子性 ...
- java事务不生效场景_事务的隔离级别、事务不生效的场景
一.事务的隔离级别 1.读未提交Read Uncommited:事务还没提交的时候,修改的数据就让别的事务给读到了----脏读 2.读已提交Read Commited:事务A查询一个数据值是1,过了段 ...
- mysql slowlog中querytime分析_技术分享 | Slow Query Log 使用详解
作者:宓祥康 爱可生交付服务部团队 DBA 擅长日志分析.问题排查等:主要负责处理 MySQL 与我司自研数据库自动化管理平台 DMP 的日常运维问题,对数据库及周边技术有浓厚的学习兴趣. 本文来源: ...
- hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...
求大神讲解下 Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了? public class Main { public static void main(Stri ...
- MySQL磁盘io瓶颈原因_为什么当磁盘IO成瓶颈之后数据库的性能急剧下降
展开全部 为什么当磁盘IO成瓶颈之后, 数据库的性能不是达到饱和e68a84e8a2ad3231313335323631343130323136353331333433643733的平衡状态,而是急剧 ...
最新文章
- eclipse中导入web项目详细配置
- Eclipse NDK 配置,无需安装Cygwin
- 关于datagridview自动增加行高度和显示全部内容的设置
- java出现no XXX in java.library.path的解决办法及eclipse配置
- 页面置换算法(FIFO , LRU, OPT)(C++实现模拟)
- 我的《机器学习》课程的课件合集下载
- 关闭 Visual Studio 2013 的 Browser Link 功能
- C#一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第100位数是多少, 用递归算法实现。...
- 几个基本概念辨析:流敏感,路径敏感和上下文敏感
- spacy库的安装与使用_为 SpaCy 提供的中文数据模型
- java直接读取rar,Java无需解压直接读取Zip文件和文件内容
- sql int 比较_分享 21 个编写 SQL 的好习惯
- ❤️Docker教程小白实操入门 教程合集❤️
- [转精]IO_STACK_LOCATION与IRP的一点笔记
- Deepin Linux禁用笔记本自带键盘
- php生成中国标准时间,中国时间标准
- [JZOJ3339]【NOI2013模拟】wyl8899和法法塔的游戏
- markdown添加目录
- 用python自动推送文章到kindle
- LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP
热门文章
- singer页左侧滚动的时候右侧跟随高亮显示
- 网易云免费OSS服务用做Markdown图床或博客图片外链
- python学习之路-day8
- [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]
- [乱弹琴]关于2的讨论
- python读取txt文件的前几行
- oracle 查询dbid,查看oracle 数据库的DBID
- C语言课后习题(21)
- 3. 机器学习中为什么需要梯度下降_【干货】机器学习 | 为什么机器能“学习”?——感知器和梯度下降...
- mysql索引条件下推_MySQL索引条件下推的简单测试