锁机制与InnoDB锁算法


MyISAM和InnoDB存储引擎使用的锁:java

  • MyISAM采用表级锁(table-level locking)。web

  • InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁算法

表级锁和行级锁对比:数据库

  • 表级锁: MySQL中锁定 粒度最大 的一种锁,对当前操做的整张表加锁,实现简单,资源消耗也比较少,加锁快,不会出现死锁。其锁定粒度最大,触发锁冲突的几率最高,并发度最低,MyISAM和 InnoDB引擎都支持表级锁。微信

  • 行级锁: MySQL中锁定 粒度最小 的一种锁,只针对当前操做的行进行加锁。行级锁能大大减小数据库操做的冲突。其加锁粒度最小,并发度高,但加锁的开销也最大,加锁慢,会出现死锁。并发

InnoDB存储引擎的锁的算法有三种:app

  • Record lock:单个行记录上的锁编辑器

  • Gap lock:间隙锁,锁定一个范围,不包括记录自己学习

  • Next-key lock:record+gap 锁定一个范围,包含记录自己flex

相关知识点:

  1. innodb对于行的查询使用next-key lock

  2. Next-locking keying为了解决Phantom Problem幻读问题

  3. 当查询的索引含有惟一属性时,将next-key lock降级为record key

  4. Gap锁设计的目的是为了阻止多个事务将记录插入到同一范围内,而这会致使幻读问题的产生

  5. 有两种方式显式关闭gap锁:(除了外键约束和惟一性检查外,其他状况仅使用record lock) A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1


   
你点的每一个“在看”,我都当成了喜欢

本文分享自微信公众号 - Java学习提高(javaxuexitisheng)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索