InnoDB的3种行锁
算法
注意:这里说的是行锁
,不是表锁,且这里讨论的是 InnoDB 引擎。

- Record Lock:单个行记录上的锁。
- Gap Lock:间隙锁,锁定一个范围,但不包含记录本身。
- Next-Key Lock:
Gap Lock + Record Lock
,锁定一个范围,并且锁定记录本身。
Record Lock
总是锁住索引
记录。如果表创建时没有设置主键索引,会使用隐式主键
锁定行
。
Gap Lock
作用:阻止多个事务将记录插入到同一范围内,导致幻读。
关闭 Gap Lock
- 将事务隔离级别设为 Read Commit。
- 将参数
innodb_locks_unsafe_for_binlog
设为1。
不建议这样设置,因为这破坏了事务的隔离性,并且对主从复制,可能导致主从数据不一致。而且性能不会优于可重复读。
Next-Key Lock
InnoDB对于行
的查询
都是采用这种锁定算法。
设计目的:解决幻读。
锁定的不是单个值,而是一个范围。
当查询的索引含有唯一
属性时,会降级为Record Lock
,即仅锁住索引本身,而不是范围。
网友评论