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

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

Mysql表存储引擎众多,我们重点了解一下MyISAM与InnoDB

MyISAM存储引擎不支持事务,仅支持表级锁,支持全文索引,适合读多写很少的应用场景,在实际开发中很少使用。

InnoDB存储引擎支持事务,支持行锁,支持SQL4种隔离级别(读未提交、读已提交、可重读、串行化),支持多版本并发控制(MVCC)实现无锁的并发读。

事务的隔离级别针对的是读操作。

MVCC多版本并发控制,主要是InnoDB为支持无锁的并发控制,实现读已提交、可重读隔离级别,所谓的可重复读就是在一个事务中读取同一条记录,返回的数据一致。举例如下:

A 事务                                                                                                      B事务

start transalation                                                                                      start transalation

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

返回( 1,dingw)                                                                                          update A set  a.name=‘dingw2’  where a.id=1

commit

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 操作

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》点击传送门,即可获取!

  • 16
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值