1. 以锁的粒度维度划分:
1.1 表锁
1.1.1 全局锁:加上全局锁之后,整个数据库只能允许读,不允许做任何写操作。
1.1.2 元数据锁/MDL锁:基于表的元数据加锁,加锁后整张表不允许其他事务操作。
1.1.3 意向锁:是InnoDB为了支持多粒度的锁,为了兼容行锁、表锁设计的,如给一条数据加了行锁,此时要加表锁,为了方便判断,在加行锁时设置了表级别的意向锁,加快判断速度。
1.1.4 自增锁/AUTO-INC锁:为了提升自增ID的并发插入性能而设计的
1.2 页面锁
1.3 行锁
1.3.1 记录锁/record锁:也就是行锁,一条记录和一行数据是同一个意思。
1.3.2 间隙锁/Gap锁:InnoDB 中解决幻读问题的一种锁机制。
1.3.3 临建锁/Next-Key锁:间隙锁的升级版,同时具备记录锁+间隙锁的功能。
2. 以互斥性的维度划分:
2.1 共享锁/s锁:不同事务之间不会相互排斥、可以同时获取的锁。
2.2 排他锁/x锁:不同事务之间会相互排斥、同时只能允许一个事务获取的锁。
2.3 共享排他锁/SX锁:MySQL 5.7中新引入的锁,主要解决SMO带来的问题。
3. 以操作类型的维度划分:
3.1 读锁:查询数据时使用的锁
3.2 写锁:执行插入、删除、修改、DDL语句时使用的锁。
4. 以加锁方式的维度划分:
4.1 显示锁:编写SQL语句时,手动指定加锁的粒度。
4.2 隐式锁:执行SQL语句时,根据隔离级别自动为SQL操作加锁。
5. 以思想的维度划分:
5.1 乐观锁:每次执行前认为自己会成功,因此先尝试执行,失败时再获取锁。
5.2 悲观锁:每次执行前都认为自己无法成功,因此会先获取锁,然后再执行。
标签:加锁,1.1,行锁,分类,msyql,1.3,SQL,维度 From: https://www.cnblogs.com/wanthune1/p/17375426.html