数据库锁总结
共享锁:也称读锁。
排他锁:也称写锁。
锁粒度角度划分:
表级锁:
S锁:共享锁
X锁:排他锁
意向锁:行级锁的锁定同时,会同时在表级进行,读或者写的意向锁。当有表级锁时直接就能判断不能锁定需要等待。
自增锁:自增ID上的锁,分为三种,8.0之前有两个,表级别锁和连续锁(拿到锁可申请连续自增数据),8.0之后进行优化,申请的自增数据可能不连续。
元数据锁(MDL锁):修改表结构
行级锁:
记录锁(S锁:共享锁、X锁:排他锁)
间隙锁(gap locks):避免插入幻影记录。解决幻读。共享锁和排他锁都可以作为间隙锁,如:已有id:1,5,8 select * from a where id = 3 for update;锁定范围:(1,5)之间的id。
如果where id = 10 for update; 则范围就是(8,+无穷大)
临键锁:建于记录锁和间隙锁。
插入意向锁:等待其他锁释放的,插入数据。此插入数据就持有插入意向锁。
锁态度划分:
悲观锁:竞争激烈,直接用悲观锁,for update。适合写多的场景,防止写读冲突,减少乐观锁频繁充实对资源的消耗。
乐观锁:竞争不是很激烈,用版本号或者时间戳进行加锁。适合读比较多的场景。
加锁方式划分:
显式锁:delete,update等加锁操作。for update,lock share in mode;
隐式锁:insert操作等。