看上图就知道 MySQL 锁可以按使用方式分为:乐观锁与悲观锁。按粒度分可以分为表级锁,
行级锁,页级锁。
1、表锁
从锁的粒度,我们可以分成两大类:
表锁: 开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低。
行锁: 开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高 不同
的存储引擎支持的锁粒度是不一样的。
InnoDB 行锁和表锁都支持、MyISAM 只支持表锁!
InnoDB 只有通过索引条件检索数据才使用行级锁,否则,InnoDB 使用表锁也就是说,
InnoDB 的行锁是基于索引的!
表锁下又分为两种模式: 表读锁(Table Read Lock)&& 表写锁(Table Write Lock)
从下图可以清晰看到,在表读锁和表写锁的环境下: 读读不阻塞,读写阻塞,写写阻塞!
读读不阻塞: 当前用户在读数据,其他的用户也在读数据,不会加锁
读写阻塞: 当前用户在读数据,其他的用户不能修改当前用户读的数据,会加锁!
写写阻塞 : 当前用户在修改数据,其他的用户不能修改当前用户正在修改的数据,会加锁!