MySQL 锁
按粒度分类
- 全局锁 
对数据库实例加锁;
比如场景需要主从手动切换,可以 执行 flush table with read lock, 锁库;
- 表级锁 
对整个表锁定;
myisam 默认
- 行级锁 
对表的行进行锁定;
- 页级锁 
BDB 引擎下,可以使用;
按模式分类
- 乐观锁 
每次操作数据时都认为没有其他人会更改数据;
需要业务层实现, 常规都是加自增版本号, 更新时带版本号与事务内版本比较, 相同则提交;
- 悲观锁 
每次操作数据时都认为其他人会更改数据;
按属性分类
- 共享锁 
读锁(S 锁), 加锁期间, 其他事务允许读取, 不允许修改;
select ... lock in share mode;
- 排他锁 
写锁(X 锁), MySQL 引擎自己实现;
比如 InnoDB , insert 、update、delete 都会为对应数据加上锁, select 不会加锁;
间隙锁
- 介绍 
- 死锁问题 
1、环境数据准备
8.0.22 版本, 表 gap_lock_test 两个字段 id、name, id 是主键, 手动插入 3 条数据 1、10、20;
隔离级别 RR;
 
 2、开事务操作
 
 











 
    
评论