实践最重要,具体看结尾实践
1、MySQL几种锁
1、属性:共享锁(S)、排他锁(X);
2、粒度:行级锁、表级锁、页级锁、记录锁、间隙锁、临键锁;
3、状态:意向锁(意向排他 IX、意向共享 IS)
2、是否锁互斥
3、几种锁介绍
1、自增锁
innodb_autoinc_lock_mode设置:
0:traditonal (每次都会产生表锁)
1:consecutive (会产生一个轻量锁,simple insert会获得批量的锁,保证连续插入)
2:interleaved (不会锁表,来一个处理一个,并发最高)
表级锁,MyIsam为traditonal,InnoDB默认是1
2、记录锁
锁的是单行数据索引,必须作用在索引,否则会变为表锁
3、间隙锁
开区间锁,(5,10)锁的就是5和10中间的数据,不包括5和10;
具体实践看结尾
4、临键锁
记录锁+间隙锁,前开后闭
具体实践看结尾
5、插入意向锁
事务A适用了间隙锁,事务B在这个间隙插入数据形成的一个特殊的锁
6、共享锁
select *
from t_student
where ... lock in share mode
读锁,可以并发读取数据,具体锁排斥信息参考上图
7、排他锁
select *
from t_student
where ... for update
写锁,不可以并发加锁,具体锁排斥信息参考上图