mysql是如何实现可重复读隔离级别的

MySQL 中的可重复读隔离级别是通过 MVCC(Multi-Version Concurrency Control,多版本并发控制)实现的。MVCC 是一种并发控制的方式,它可以为每个事务生成一个唯一的事务 ID,并在每个数据行上存储多个版本,以便在并发访问时保证事务隔离性和一致性。

在 MySQL 中,每个数据行都有一个隐藏的事务 ID,表示最后一次修改该数据行的事务 ID。同时,每个事务也有一个 ID,表示该事务的开始时间。当一个事务访问数据行时,MySQL 会根据该事务的开始时间和数据行的事务 ID 来判断该数据行是否可以被访问。如果该数据行的事务 ID 大于该事务的开始时间,则表示该数据行正在被其他事务修改,该事务需要等待其他事务提交后才能访问。

在可重复读隔离级别下,MySQL 还会为每个事务创建一个快照(Snapshot),用于保存该事务开始时的数据状态。当其他事务修改了数据行时,该事务依然可以访问该数据行的旧版本,从而保证了事务的隔离性和一致性。

需要注意的是,在 MySQL 中,可重复读隔离级别并不能完全避免并发问题,例如幻读(Phantom Read)问题。为了解决这些问题,MySQL 还提供了更高级别的事务隔离级别,例如串行化隔离级别。
全部评论
感谢大佬分享
点赞 回复 分享
发布于 2023-03-16 19:09 四川
m了学习一下
点赞 回复 分享
发布于 2023-03-16 18:36 山东

相关推荐

点赞 评论 收藏
分享
人间雪:简历最好只要一页,除非你牛逼到一页都写不下了
点赞 评论 收藏
分享
程序员牛肉:1.大头肯定是院校问题,这个没啥说的。 2.虽然有实习,但是实习的内容太水了,在公司待了七个月的时间,看起来就只做了jwt和接入redis。爬取新闻,数据导入。这几个需求值得你做七个月吗?这不就是三四个月的工作量吗?我要是面试官的话真心会认为你能力不太行。所以既然有实习了,一定要好好写,像是Swagger这种东西是真没必要写上去,就拉一个包的事情。 3.我个人觉得话,在校生不要把自己当社招看,除非你的项目是特别牛逼,特别有名的含金量,否则不要写这种密密麻麻的一串子工作职责。你的项目只有一个作用,就是供面试官从中来抽取八股对你进行拷打。 但是你现在这个看不来什么技术点,可以改一下,详细表述一下你用什么技术实现了什么功能,在实现这个功能的过程中,你解决了什么难题。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务