MyISAM采用表级锁,InnoDB支持行级锁和表级锁,一般默认是行级锁。
表级锁:MySQL中锁定粒度最大的一种锁,对当前操作的整张表加锁,实现简单,资源消耗也少,加锁快,不会出现死锁。但是锁定粒度大,触发锁冲突的概率最高,并发度低。
InnoDB支持的行级锁,包括以下几种:
- Record Lock:对索引项加锁,就是单个行记录上的锁。其他事务不能修改和删除加锁项。
- Gap Lock:间隙锁,锁定一个范围,其他事务不能在锁范围内插入数据。
- Next-key Lock:索引项本身和索引范围,是Record Lock和Gap Lock的结合,可以解决幻读问题。
行级锁:MySQL中锁定粒度最小的一种锁,只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。加锁的开销也大,加锁慢,会出现死锁。加锁粒度最小,并发度高。