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

您所在的位置:网站首页 mysql行锁和表锁怎么实现 MySQL面试之InnoDB的行锁是怎么实现的?

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

2024-07-13 06:06| 来源: 网络整理| 查看: 265

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锁。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3