目录
遇见已是上上签 岂敢追求到永远
锁的粒度
MyISAM使用表级锁,InnoDB采用更细粒度的行级锁。InnoDB行级锁通过索引来实现,如果查询条件中有主键则锁定主键,如果有索引则先锁定对应索引然后再锁定对应的主键(可能造成死锁),如果没有索引则会锁定整个表。锁和MVCC (多版本的并发控制,Multi-Version Concurrency Control)解决了数据库事务不同隔离级别的隔离性,不同事物间能够互不干扰。从粒度上可分为表锁、页锁、行锁。表锁有意向共享锁、意向排他锁、自增锁等。行锁是在引擎层由各个引擎自己实现的。但并不是所有的引擎都支持行锁,比如MyISAM引擎就不支持行锁。根据加锁的范围,MySQL里面的锁大致可以分成全局锁、表级锁和行锁三类。
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
页面锁:开销