数据库锁总结
共享锁:也称读锁。
排他锁:也称写锁。
锁粒度角度划分:
表级锁:
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操作等。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)