表锁

行锁

记录锁

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锁锁定的区域是不能进行插入操作的。


大橙子
12 声望1 粉丝