MySQL技术内幕-InnoDB存储引擎读书笔记(mysql存储引擎概述)

select a.id,a.name from A a where a.id=1

返回(1,dingw),此结结果不受事务B的影响,尽管B事务已经提交。

如何实现上述需求呢?如果通过锁是可以实现的,如果A事务对A表进行查询操作,使得B事务的更新无法执行,这样在A事务结束后B事务才能执行,能实现可重读隔离级别,但并发读明显不理想,有没有一种无锁设计来实现可重复读隔离级别呢?InnoDB使用MVCC(多版本并发控制协议来实现可重复读隔离级别)

MVCC 为每行数据增加二列(更新版本号,删除版本号)[版本号存储的其实就是事务ID]【可重读隔离级别】

select 操作:

Mysql只返回满足如下条件的行数据:

1)更新版本号小于或等于当前事务ID(小于表示是事务开始之前的数据,等于表示当前事务对数据进行过修改。)

2)删除版本号要么为空,要么大于当前事务ID,(如果为空,表示未删除,如果大于事务ID,表示是以后修改的)

insert 操作

1)更新版本号设置为当前事务ID,删除版本号为空

update 操作

update操作为分差为两条语句,先复制一份数据,将删除版本号设置为当前事务ID(这样保证select时不会查出该数据),然后插入一条新纪录(insert),其更新版本号为当前事务ID,删除版本号为空

delete 操作

将删除版本号设置为当前事务ID

mysql会定时清理这些多余数据。

InnoDB存储引擎的MVCC版本基于Undo日志,详情请关注后续文章。

欢迎加笔者微信号(dingwpmz),加群探讨,笔者优质专栏目录:

1、源码分析RocketMQ专栏(40篇+)

2、源码分析Sentinel专栏(12篇+)

3、源码分析Dubbo专栏(28篇+)
4、源码分析Mybatis专栏

总结:心得体会

既然选择这个行业,选择了做一个程序员,也就明白只有不断学习,积累实战经验才有资格往上走,拿高薪,为自己,为父母,为以后的家能有一定的经济保障。

学习时间都是自己挤出来的,短时间或许很难看到效果,一旦坚持下来了,必然会有所改变。不如好好想想自己为什么想进入这个行业,给自己内心一个答案。

面试大厂,最重要的就是夯实的基础,不然面试官随便一问你就凉了;其次会问一些技术原理,还会看你对知识掌握的广度,最重要的还是你的思路,这是面试官比较看重的。

最后,上面这些大厂面试真题都是非常好的学习资料,通过这些面试真题能够看看自己对技术知识掌握的大概情况,从而能够给自己定一个学习方向。包括上面分享到的学习指南,你都可以从学习指南里理顺学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

学习路线,避免低效学习。

大厂Java架构核心笔记(适合中高级程序员阅读):

[外链图片转存中…(img-bD8DsQRQ-1714425971534)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 25
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值