46.加锁规则总结

108 阅读1分钟

RC隔离级别 + 唯一索引

唯一索引行锁,主键索引行锁

RC 隔离级别 + 主键

主键索引行锁

RC 隔离级别 + 普通索引

普通索引的X锁,主键的X锁

RC 隔离级别 + 无索引

对应主键的X锁

若列上没有索引,MySQL会走聚簇(主键)索引进行全表扫描过滤。每条记录都会加上X锁。但是,为了效率考虑,MySQL在这方面进行了改进,在扫描过程中,若记录不满足过滤条件,会进行解锁操作。同时优化违背了2PL原则。

2PL即两阶段提交原则,加锁阶段是在开启事务,释放锁阶段是在commit和rollback。

由于这个解锁不是在commit和rollback阶段完成的所以说违背了2PL原则。

RR隔离级别 + 唯一索引

唯一索引行锁,主键索引行锁

RR 隔离级别 + 主键

主键索引行锁

RR 隔离级别 + 普通索引

行锁+间隙锁

RR隔离级别 + 无索引

全表行锁 + 全表间隙锁 即锁表,不能做更新、删除操作和插入操作