Innodb的锁

InnoDB的行锁是实现在索引上的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。

  1. 记录锁(Record Locks):锁定索引记录;
  2. 间隙锁(Gap Locks):锁定间隔,防止间隔中被其他事务插入;
  3. 临键锁(Next-Key Locks):锁定索引记录+间隔,防止幻读;

如果数据库的事务隔离级别将为RC(读提交),那么间隙锁和临键锁都会失效。

最后总结一下MyISAM和Innodb的区别:

  1. MyISAM只支持表锁,InnoDB可以支持行锁。
  2. MyISAM不支持外键,InnoDB支持外键。
  3. MyISAM不支持事务,InnoDB支持事务。
  4. count(*) MyISAM会直接存储总行数,InnoDB则不会,需要按行扫描。
  5. InnoDB的索引与行记录存储在一起,这一点和MyISAM不一样

2019-07-30
关于MySQL的锁这块,总是感觉含混不清,各种概念混在在一起。
一个清晰的分类是:记录锁,间隙锁,临键锁,表锁。其中记录锁分成共享锁(S)和排斥锁(X)。
间隙锁和临键锁 在RC级别中,是要失效的。
一个有深度的知识是,记录锁的实现是基于索引的,想要使用记录锁,必须命中索引,否则只能退化为表锁。

2020-02-28
间隙锁和临键锁,只存在RR
MVCC只存在RC和RR

鸣谢:InnoDB,5项最佳实践,知其所以然?, InnoDB,select为啥会阻塞insert?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一 综述 MySQL 的锁机制相较其他的数据库比较简单,最显著的特点是不同的存储引擎支持不同的锁机制。主要有三种类...
    柯基去哪了阅读 8,485评论 3 7
  • 本章节主要讨论InnoDB所使用到的锁的类型。注:本文主要参考Mysql 5.7的官方文档,如果没有特别声明,本文...
    麦香小瑜儿阅读 3,038评论 0 0
  • 笔记摘自《MYSQL技术内幕(InnoDB存储引擎)》 1 什么是锁 锁是数据库系统区别于文件系统的一个关键特性。...
    10xjzheng阅读 4,028评论 0 0
  • 久仰大名的一部著作,曾经听书时了解过。今次拜读,果然不一般。 人类简史虽为简史可一点也不简单,主要就是讲述了有人类...
    德以立命阅读 4,477评论 2 1
  • 生活是缘 生活 是一条线 这条线是人生的缘 认识了许多人 许多人与你结缘 生活 是个圆环 随着环的滚动 让你羽翼丰...
    纯水陆零阅读 1,751评论 2 3

友情链接更多精彩内容