MySQL面试之InnoDB的行锁是怎么实现的?

InnoDB行锁是通过索引数据页的记录加锁实现的。具体实现的算法有3中:Record Lock, Cap Lock,Next-key Lock.

RecoreLock锁:锁定单个行记录的锁。(记录锁,RC,RR隔离级别都支持)

CapLock锁:间隙锁,锁定索引记录间隙,确保索引记录的间隙不变。(RR隔离级别支持)

Next-key Lock 锁: 记录锁和间隙锁组合,同时锁住数据,并且锁住数据前后范围。(记录锁+范围锁,RR隔离级别都支持)

在RR隔离级别:InnoDB对于记录加锁都是先采用 Next-Key Lock ,但是当SQL操作含有唯一索引时,Innodb对于Next-Key Lock 进行优化,降级为 RecordLock, 仅锁住索引本身非为范围。

1)select ... from 语句:InnoDB引擎采用MVCC机制实现非阻塞读,所以对于普通的select语句,InnoDB不加锁

2)select ... from lock in share mode语句:追加了共享锁,InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。

3)select ... from for update语句:追加了排他锁,InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。

4)update ... where 语句:InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。

5)delete ... where 语句:InnoDB会使用Next-Key Lock锁进行处理,如果扫描发现唯一索引,可以降级为RecordLock锁。文章来源地址https://uudwc.com/A/z3mva

原文地址:https://blog.csdn.net/ZSS1753936255/article/details/131754648

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年07月17日 10:21
Flink是什么
下一篇 2023年07月17日 10:21