0. 总
根据加锁的范围, MySQL里面的锁大致可以分成全局锁、 表级锁和行锁三类。
1. 全局锁: 让整个库处于只读状态。全局锁的典型使用场景是, 做全库逻辑备份。
Flush tables with read lock (FTWRL)
2. 表级锁:MySQL里面表级别的锁有两种: 一种是表锁, 一种是元数据锁(meta data lock, MDL)。
1)表锁:可以用unlock tables主动释放锁,也可以在客户端断开的时候自动释放。
2)元数据锁:MDL不需要显式使用,保证读写的正确性。
3. 行锁
在InnoDB事务中, 行锁是在需要的时候才加上的, 但并不是不需要了就立刻释
放, 而是要等到事务结束时才释放。 这个就是两阶段锁协议。
如果你的事务中需要锁多个行, 要把最可能造成锁冲突、 最可能影响并发度的锁尽量往后放。