一:按照锁的类型进行分类,则分为读锁与写锁,读锁与写锁有读读共享,读写互斥,写写互斥的原则。
二:根据锁的粒度进行分类,则可以分为行级锁和表级锁(行锁中也有读锁和写锁)。行级锁是InnoDB特有的,MYISAM没有
1.行锁:
(1)记录锁:锁住单条记录(实则锁的是索引)。可以通过Lock in share mode获取行级读锁,通过for update 获取行级写锁。当该记录加锁后,就会根据该锁的原则来判断该数据是否可读,是否可写,如读读共享,读写互斥,读读互斥
(2)间隙锁:锁住间隙,防止读的时候插入数据(非互斥锁,即读锁)。使用范围查询时,会锁住相应范围
(3)next-key锁:锁住区间,不让其他事务在该区间上操作数据。主要是针对唯一索引,因为唯一索引有唯一约束,不会插入相同主键的数据。每一条非唯一索引上都有该锁,使用唯一索引操作数据时,会获取该锁。如会把10条数据根据age索引分成三个区间,分别是[-∞,3],[4,7],[8,+∞],当要查找age=5时,就会锁住第二个区间
2.表锁:
顾名思义,就是锁住整张表,同样表锁也有读锁和写锁。可以通过Lock table XXX read/write获取表级读锁/写锁。注意,当处理完数据后,一定要通过Unlock table xxx来显示解锁
最后:附上后端技术交流圈,欢迎各位大佬入圈交流技术......V:ff1341658(先添加好友后拉群,添加好友时请备注:小白不黑)