表级锁和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锁,此时想改变树型结构即索引结构的话,是会被锁住的,这个类似于表锁,但原理上和表锁是完全不同的 :)
042019-06-21
相似问题