业务系统提交了一个数据库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事务中宕机_事务执行一半,业务系统宕机,数据库的数据会怎样?相关推荐

  1. Spring 如何在一个事务中开启另一个事务?

    Spring项目,需要在一个事务中开启另一个事务. 上面提到的情景可能不常见,但是还是会有的,一旦遇到,如果业务比较复杂,就会很麻烦,但是还是有解决的方案的,比如将一个service方法拆成两个方法, ...

  2. spring中怎么让事物提交_Spring怎么在一个事务中开启另一个事务

    点击上方"Java知音",选择"置顶公众号" 技术文章第一时间送达! 作者:Mazin my.oschina.net/u/3441184/blog/893628 ...

  3. mysql事务保证幂等_事务与一致性:刚性or柔性

    转发自 https://cloud.tencent.com/developer/article/1038871 在高并发场景下,分布式储存和处理已经是常用手段.但分布式的结构势必会带来"不一 ...

  4. mysql innodb事务中 出现_MySql InnoDB事务死锁问题

    这篇博客的文章内容发生于某天晚上服务端日志报了一大堆 Deadlock found when trying to get lock; try restarting transaction,当时通过字面 ...

  5. mysql事务四个特性_事务的四个特性

    事务的四个特性 在工作中,经常会接触到事务这个概念.涉及到事务,大家首先想到的就是事务的四个特性:ACID.抽空总结和梳理了一下事务的这四个特性. 1.原子性(Atomicity) 1.1什么是原子性 ...

  6. java事务不生效场景_事务的隔离级别、事务不生效的场景

    一.事务的隔离级别 1.读未提交Read Uncommited:事务还没提交的时候,修改的数据就让别的事务给读到了----脏读 2.读已提交Read Commited:事务A查询一个数据值是1,过了段 ...

  7. mysql slowlog中querytime分析_技术分享 | Slow Query Log 使用详解

    作者:宓祥康 爱可生交付服务部团队 DBA 擅长日志分析.问题排查等:主要负责处理 MySQL 与我司自研数据库自动化管理平台 DMP 的日常运维问题,对数据库及周边技术有浓厚的学习兴趣. 本文来源: ...

  8. hibernate mysql autocommit_Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了?...

    求大神讲解下 Hibernate4 中为什么我没有用commit()方法直接用save就存到数据库了? public class Main { public static void main(Stri ...

  9. MySQL磁盘io瓶颈原因_为什么当磁盘IO成瓶颈之后数据库的性能急剧下降

    展开全部 为什么当磁盘IO成瓶颈之后, 数据库的性能不是达到饱和e68a84e8a2ad3231313335323631343130323136353331333433643733的平衡状态,而是急剧 ...

最新文章

  1. eclipse中导入web项目详细配置
  2. Eclipse NDK 配置,无需安装Cygwin
  3. 关于datagridview自动增加行高度和显示全部内容的设置
  4. java出现no XXX in java.library.path的解决办法及eclipse配置
  5. 页面置换算法(FIFO , LRU, OPT)(C++实现模拟)
  6. 我的《机器学习》课程的课件合集下载
  7. 关闭 Visual Studio 2013 的 Browser Link 功能
  8. C#一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第100位数是多少, 用递归算法实现。...
  9. 几个基本概念辨析:流敏感,路径敏感和上下文敏感
  10. spacy库的安装与使用_为 SpaCy 提供的中文数据模型
  11. java直接读取rar,Java无需解压直接读取Zip文件和文件内容
  12. sql int 比较_分享 21 个编写 SQL 的好习惯
  13. ❤️Docker教程小白实操入门 教程合集❤️
  14. [转精]IO_STACK_LOCATION与IRP的一点笔记
  15. Deepin Linux禁用笔记本自带键盘
  16. php生成中国标准时间,中国时间标准
  17. [JZOJ3339]【NOI2013模拟】wyl8899和法法塔的游戏
  18. markdown添加目录
  19. 用python自动推送文章到kindle
  20. LOJ#3124. 「CTS2019 | CTSC2019」氪金手游 容斥+DP

热门文章

  1. singer页左侧滚动的时候右侧跟随高亮显示
  2. 网易云免费OSS服务用做Markdown图床或博客图片外链
  3. python学习之路-day8
  4. [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]
  5. [乱弹琴]关于2的讨论
  6. python读取txt文件的前几行
  7. oracle 查询dbid,查看oracle 数据库的DBID
  8. C语言课后习题(21)
  9. 3. 机器学习中为什么需要梯度下降_【干货】机器学习 | 为什么机器能“学习”?——感知器和梯度下降...
  10. mysql索引条件下推_MySQL索引条件下推的简单测试