MySQL数据库 --- 事务面试重点

本文详细解释了数据库事务的持久性、隔离性原理,以及脏读、不可重复读和幻读的概念,并讨论了MySQL的隔离级别。文章还提及了Java开发者的学习资源,特别是针对Java开发中的数据一致性相关面试题的准备和学习资料。
摘要由CSDN通过智能技术生成

持久性(Durability):


当事务执行完毕了之后,他的操作对于数据的修改会一直持续下去.

例如: 事务完成了对数据的修改,上传到了磁盘上(提交成功后),这个时候,发生故障也不会让数据库中的数据被破坏

隔离性(isolation):


数据库允许多个事务同时并发执行修改和读取操作.隔离性就可用防止并发执行修改和删除的时候造成数据不一致的情况.

5. 脏读

=========================================================================

脏读就是一个事务A在执行修改数据的操作,此时事务A还没有完成修改操作,这个时候有另外一个事务B读取了此时的内容.此时 事务B的读操作就是脏读,

因为此时此刻的事务A还没有完成修改操作,随时都可能再次修改刚刚事务B读取到的数据.

例子:


例如小明向小红转账示例.

本来小明账户余额是1000.小红账户余额是500

此时事务A执行操作 : 小明向小红转账500元

此时事务B执行操作: 读取小明账户余额.

当事务A执行了 小明账户-500的操作,还没执行小红账户+500的操作的时候,事务B读取了小明账户余额 500.

但是是事务A此时发生错误,发生了回滚(rollback),小明账户又变成了1000,可是事务B读取到的却是500.

图解时间线:


在这里插入图片描述

解决办法:


写操作加锁,当一个事务在执行写操作的时候,其他事务没办法执行读操作,当事务执行完写操作,释放了锁,其他事务才能读.

6. 不可重复读

============================================================================

不可重复读就是,事务A在执行过程中,多次读取的数据不相同,就叫不可重复读.

例子:


小明想去查自己的成绩并且看看别人成绩,老师上传成绩和检查成绩.

事务A就执行: 读小明成绩 -> 看看别人成绩 -> 再次查看自己的成绩

事务B就执行: 上传成绩 -> 发现错误成绩修改成绩

当事务B执行写操作的时候,事务A想去读操作发现写操作加锁了,没办法读,只有等待写操作完成,当事务B写操作完成后,事务A第一次读操作,发现小明考了80分,第一次读后,整个事务A还没结束,事务B进行了修改操作,将小明成绩修改成了60分,此时事务A再去读的时候,发现小明只有60分,前后数据不一致,就是不可重复读.

图解时间线:


在这里插入图片描述

解决办法:


读操作也加锁,当事务A在读的时候,事务B没办法修改操作,只有等事务A执行完释放锁之后,事务B才能进行操作.

7. 幻读

=========================================================================

幻读就是,事务A在执行过程中,多次读取的结果集不一样(数据总量不一样)

虽然读操作和写操作都加锁了,但是可以新增.

例子:


小明查看暑期作业有多少,老师上传暑期作业.

事务A 小明查看暑期作业有多少 -> 小明进行其他操作 -> 小明再次查看暑期作业有多少

事务B 老师添加暑期作业.

当事务A去执行的时候,第一次读操作,发现暑期作业只有10页.然后小明进行了其他的操作,此时事务B进行添加操作,又增加了90页.

当事务B再去查看的时候,发现作业页数变成了100页.

图解时间线:


在这里插入图片描述

解决办法:


彻底让事务之间彻底的 串行化, 就是当事务A在执行的过程中,事务B什么也不能干,只能挂机等待.

8. MySQL 的隔离级别

==================================================================================

1. read uncommitted
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。

image

本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。

image

image

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!
中遇到的题目以及有对应的视频解析总结。**

[外链图片转存中…(img-0SNw5jyg-1711798865269)]

[外链图片转存中…(img-xXFjtRGT-1711798865270)]

《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值