表级锁和gap锁

来源:3-12 锁模块之MyISAM与InooDB关于锁方面的区别_2

慕函数0577617

2019-06-20

老师您好,您这节课4分30秒描述innodb在sql没有用到索引的时候用的是表级锁,sql在用到索引的时候用的是行级锁和gap锁。但是您在3-17的20分37秒时描述不走索引会对所有的gap都上锁相当于表锁。请您解释下?

写回答

1回答

翔仔

2019-06-21

同学好,同学听得真细,探索精神非常棒,前面因为我们没有讲到gap锁行锁相关的详细内容,所以暂且理解为走表锁,实际上在不走索引的时候,InnoDB的实现方式和MyIsam的表锁方式不同,

单条索引记录上加锁,record lock锁住的永远是索引,而非记录本身,即使该表上没有任何索引,那么innodb会在后台创建一个隐藏的聚集主键索引,那么锁住的就是这个隐藏的聚集主键索引。所以说当一条sql没有走任何索引时,那么将会在每一条聚集索引后面加X锁,此时想改变树型结构即索引结构的话,是会被锁住的,这个类似于表锁,但原理上和表锁是完全不同的 :)


0
4
慕函数0577617
回复
翔仔
好的,谢谢老师
2019-06-21
共4条回复

剑指Java面试-Offer直通车 百度资深面试官授课

招聘季即将到来,让百度资深面试官来为你的高薪Offer保驾护航

8427 学习 · 1870 问题

查看课程