大家好,这里是编程Cookbook。本文详细介绍MySQL的几种常见锁分类,如:表级锁、行级锁、页面锁、悲观锁、乐观锁、共享锁、排他锁、Gap-锁等。
按锁粒度分
表级锁
* 开销小,加锁快,不会出现死锁,锁粒度大(整张表)。
* 并发度低,发生锁竞争概率大,适合查询。
行级锁
* 开销大,加锁慢,会出现死锁,锁粒度最小(一行数据)。
* 并发度高,发生锁竞争概率小,适合并发写,事务控制。
页面锁
* 开销、加锁速度、锁粒度、并发度都介于表级锁和行级锁之间,会出现死锁。
总结
很难说哪种锁更好,只能根据具体应用程序的特点选择合适的锁。
* 对于查询远大于修改的场景,表级锁是合适的,因为锁粒度大但管理简单。
* 对于并发查询并发更新少量数据的应用,行级锁是更合适的选择,它提供更高的并发性和灵活性。
InnoDB的默认锁是行级锁,但通过意向锁机制实现了多粒度锁的协同工作。
锁与索引关系