美文网首页
Innodb的锁

Innodb的锁

作者: packet | 来源:发表于2019-03-01 22:07 被阅读0次

    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?

    相关文章

      网友评论

          本文标题:Innodb的锁

          本文链接:https://www.haomeiwen.com/subject/kojquqtx.html