按照锁的粒度来分:
一、全局锁(对整个数据库实例加锁)
命令:Flush tables with read lock
使用场景:一般用于数据库备份时
二、表级锁
表共享读锁、表独占写锁
1.表锁
命令:lock tables … read/write;unlock tables
2.元数据锁(meta data lock,MDL)
执行查询、更新操作时,会自动加上
三、行级锁
在事务提交时锁才会释放行锁。
那么引申出两阶段锁协议的概念,每个事务的执行可以分为两个阶段:生长阶段(加锁阶段)和衰退阶段(解锁阶段)
1.共享锁
2.排他锁
四、间隙锁
五、页级锁
介于行级锁和表级锁中间的一种锁。
按照锁的共享策略来分:
一、共享锁(S)
select * from table lock in share mode ;--可共存,要想修改就必须等所有共享锁都释放完之后。
二、排他锁(X)
select * from table for update ;