锁
表锁
行锁
记录锁
GAP锁
插入意向锁
Next-key锁
存储引擎
隔离级别隔离级别隔离级别隔离级别隔离级别隔离级别
读未提交
读已提交
可重复度
串行化
索引
聚簇索引
非聚簇索|二级索引|辅助索引
锁的实践论证
RR级别 innoDB的所有查询优先采用Next-Key,
等值查询并且唯一索引时降级为Record锁。
等值查询不存在数据时会降级为GAP锁。
RepeatableRead级别 | 唯一索引(记录存在) | 唯一索引(记录不存在) | 非唯一索引(记录存在) | 非唯一索引(记录不存在) | ||
---|---|---|---|---|---|---|
update\ | delete\ | select...for update等值查询 | 索引上加Record锁,聚簇索引加Record锁 | 索引上加X,GAP,聚簇索引不加锁 | 索引上加X,GAP锁,聚簇索引加X锁 | 索引上加X,GAP,聚簇索引不加锁 |
select...lock in share mode | 索引上加S锁,聚簇索引加X锁 | 索引上加S,GAP锁,聚簇索引不加锁 | 索引上加S,GAP锁,聚簇索引加X锁 | 索引上加S,GAP,聚簇索引不加锁 |
insert
操作需要获取插入意向锁
,持有GAP锁
时获取插入意向锁
会阻塞,也就是GAP锁
锁定的区域是不能进行插入操作的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。