MySQL八股整理(二)

1. MVCC

谈谈对于MVCC的理解

MVCC是指多版本并发控制,也即维护一个数据的多个版本。MVCC使用快照读提供了非阻塞读功能,使得读写操作没有冲突。MVCC的具体实现依赖于数据库记录中的三个隐藏字段、undolog日志和readView。
在MySQL中,可重复读隔离级别就是依赖于MVCC来实现的。

实现原理

(1)InnoDB数据库表记录中的隐藏字段
在这里插入图片描述
(2)undoLog版本链
在这里插入图片描述

(3)ReadView
ReadView(读视图)是快照读SQL执行时MVCC提取数据的依据,记录并维护当前活跃的(未提交的)id。ReadView中包含了四个核心字段(当前活跃的事务ID集合,最小活跃事务ID, 当前最大事务ID+1, ReadView创建者的事务ID)。

2. 锁

共享锁与排他锁

在这里插入图片描述
在这里插入图片描述

表级锁与行级锁

表级锁一锁就锁住整张表。MyISAM只支持表级锁,串行化隔离级别也是通过加表锁来实现的。
行级锁的粒度更小,仅对相关的记录上锁即可,行级锁的粒度更小。
注: InnoDB的行锁是针对索引字段加的锁,表级锁是针对非索引字段加的锁。当我们执行Update、delete语句时,如果Where条件中字段没有命中索引或者索引失效,就会导致扫描全表对表中所有记录进行加锁。

意向锁

意向锁表示某个事务正在锁定一行或者将要锁定一行,表明一个意图。它分为意向共享锁(IS)和意向排他锁(IX)。通过使用意向锁,可以避免在加表锁前对每一条记录的遍历。

意向锁之间不会互相冲突,即意向互斥锁和意向共享锁是可以并存的。 意向锁不会与行级别的锁进行冲突,只会与表级别的互斥。

行级锁的分类

(1) 记录锁
锁定单个行记录的锁,防止其他事务对此进行update和delete。在RC、 RR隔离级别下都支持。

(2)间隙锁
锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert, 产生幻读。在RR隔离级别下都支持。

(3)临键锁
行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙。在RR隔离级别下支持。

行级锁的使用

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值