- 按照粒度分,MySQL锁可以分为全局锁、表级锁、行锁
- 全局锁会锁住左右表,整个库无法修改
- 表级锁分为表锁(数据锁)和元数据锁
-
全局锁
FTWRL(Flush tables with read lock)
- 此命令使整个库处于只读状态
- 主要用途是保证备份的一致性
-
表锁(数据锁)
命令:lock tables XXX read/write
-
元数据锁(matadata lock)
元数据指的是表的结构、字段、数据类型、索引等
- 事务访问数据时,会自动给表加MDL读锁
-
行锁
行锁也有两种类型,有很多种叫法:
- 读锁/写锁
- 共享锁/排它锁
- 共享锁/独占锁
- S锁/X锁
- S锁不是不让读,而是自己要读,不让别人写
- X锁不只是不让写,而是自己要写,不让别人读写
- 只有S锁和S锁之间可以兼容,其他均不兼容

总结
锁是MySQL高效执行事务的必备基础
锁会引发很多的性能问题,可能造成等待和死锁
锁还会引发很多的功能问题,如脏读和不可重复读等
