MySQL进阶篇之事务的隔离级别详解

本文详细介绍了MySQL中四种事务隔离级别:读未提交、读已提交、可重复读及串行化。每种隔离级别下可能产生的问题如脏读、虚读及幻读等现象也逐一进行了阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文主要介绍了我在MySQL的学习之中的收获,本次主要记录MySQL的学习中对事务的隔离级别的知识总结。(听说这部分内容是面试的时候的高频面试部分)开干!!


提示:以下是本篇文章正文内容,主要是通过文字的介绍形式来完成学习的记录。

一、什么是事务隔离级别?

数据库允许多个事务并行,多个事务之间是相互独立与隔离的,如果事务之间不相互隔离并且操作与统一数据时,可能会导致数据的一致性被破坏。

内容补充:ACID原则分别为原子性隔阂性一致性持久性

二、四大隔离级别详解

在多个事务线程共同作用于数据库服务器的情况下将产生的四大隔离级别问题如下所言,本次实验就以两个不同的事务线程为例进行说明

1.读未提交(Read Uncommitted)

在这里插入图片描述

解释:事务1可以读取事务2执行中但是并未提交的数据,这种情况一般发生在事务1中出现了错误导致事务1中执行成功了的部分的数据仍然存储于数据库连接缓存中,事务2在本应该读取数据库服务器中的数据时却误读了事务1存储于连接缓存中的数据,因此导致读取数据错误,导致所谓的“脏读”

什么是“脏读”?
即一个事务读取到了另一个事务中未提交的数据,该数据一般滞留与连接缓存区域中。

2.读已提交(Read Committed)

在这里插入图片描述

事务2只能够读取事务1中已经提交了的数据(即该数据已经通过手动提交完成了事务中的所有对数据库操作),这样可以避免“脏读”的出现,但是会造成“不可重复读(虚读)”的问题出现。

什么是“虚读”?
即在同一个事务中,两次查询操作获取到的数据不一致。
例如:事务2进行第一次查询之后在第二次查询之前,事务1修改并提交了新的数据,事务2进行第二次查询时读取到的数据和第一次查询到的数据不一致。

3.可重复读(Repeatable Read)–MySQL默认级别

在这里插入图片描述

事务2执行第一次查询之后,在事务结束之前其他事物不能修改对应的数据,避免了不可重复读(虚读),但是会造成“幻读”的问题出现。

什么是“幻读”?
事务2对数据表中的数据进行修改后然后进行查询,在查询之前事务1向数据表中新增了一条数据,就导致了事务2以为修改了所有的数据,但是最终查询除了与修改不一致的数据(事务1新增的数据),产生了查询结果的错误。

4.串行化(Serializable)

同时只允许一个事务对数据表进行操作,避免了脏读、虚读、幻读等问题,但是效率很低。
例如:如果你要去银行办理一张卡,那么你必须等这个银行的所有用户都停止对银行的操作后你才能办理卡,显然这种事是不存在的主要是为了方便大家理解,哈哈~~所以串行化效率不高。

总结

隔离级别脏读虚读(不可重复读)幻读
读未提交(Read Uncommitted)
读已提交(Read Committed)×
可重复读(Repeatable Read)××
串行化(Serializable)×××

以上就是今天要讲的内容,本文仅仅简单介绍了MySQL中四大隔离级别的介绍,建议本部分内容要深入理解,我问了几个老哥听说现在面试官都很喜欢问MySQL底层的东西。

点赞+关注=开发者的基本素养~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sugar-free->小粽子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值