面试官进程问:所以在这里记录一下,面试官你自己看
讲一下mysql有多少种锁?
我们可以了解到,有死锁,活锁,共享锁,排它锁,行锁,表锁,记录锁,临建锁,间隙锁,意向共享锁,意向排它锁。
一堆记起来,其实对人不是很友好的,所以我们可以先开始做个分类:
锁的分类
从状态划分:共享锁,排它锁
从粒度来划分:行锁,表锁,记录锁,间隙锁,临建锁
从状态来划分:意向共享锁,意向排它锁。
**注意:**死锁和活锁,其实编程方面,并发编程方面,所以这里不录入
01-状态锁-解释:
共享锁,也就是我们常说“ 读锁”,可以共享大家都可以读
排他锁:也就是我们常说“写锁”,为了保持事务一致性,防止脏读,所以写锁有排他性
02-粒度锁-解释:
行锁:表的多行数据锁住,粒度小,所以不容易冲突
表锁:锁住整张表,粒度大,所以容易引发冲突
记录锁:锁住记录,锁住索引记录,而不是真正的数据记录
间隙锁:锁定一个范围,也被称为gap锁,不会阻塞其他gap锁,但会阻塞插入间隙锁,这也是防止幻读的关键:
临建锁:当某个事务持有该数据行的临键锁时,会锁住一段左开右闭区间的数据
03-状态锁
1)意向共享锁(IS锁):事务在请求S锁前,要先获得IS锁
2)意向排他锁(IX锁):事务在请求X锁前,要先获得IX锁
具体可以参考以下博主的文章: