mysql 十把锁之《小猫钓鱼》

元数据锁:在这个美丽的森林里,小猫们决定要把钓鱼的成果记录下来。于是,它们首先需要创建一个 "鱼表" 来存放钓鱼的信息。当开始创建鱼表的时候,数据库自动为这个表加上了元数据锁。这个锁是为了防止在表的结构定义等元数据被修改的同时,有其他事务对这个表进行操作。就好像小猫们在搭建一个存放鱼的小仓库时,先在门口挂上一个 "正在施工" 的牌子,防止其他动物在这个时候进入仓库捣乱。

自增锁:白猫是第一个钓到鱼的小猫。当白猫准备把自己钓的鱼存入鱼表时,首先会涉及到自增锁。因为鱼表中有自增 ID 字段,在插入新数据生成自增 ID 的过程中,自增锁会确保这个过程的唯一性。白猫小心翼翼地把鱼放入桶中,心里盘算着等会儿如何将自己的收获存入鱼表。

行级锁:接着,白猫向数据库申请行级锁,以确保在它存入鱼的过程中,其他小猫不能同时对这条记录进行操作。白猫专注地将自己钓的鱼的信息整理好,准备存入鱼表。

表级锁:突然,一场暴风雨即将来临,森林中的动物们都慌乱起来。为了确保鱼表中的数据安全,数据库自动触发表级锁,防止在混乱的情况下有其他大规模的意外操作影响到鱼表。就好像小猫们在暴风雨来临前,赶紧给存放鱼的仓库加上一把大锁,确保里面的鱼不会受到影响。而且由于这场暴风雨可能会导致鱼全部死掉,小猫们决定在鱼表中加一个字段,存放活鱼的条数。这样可以更好地跟踪鱼的存活情况。

共享锁:花猫看到白猫完成操作后,准备把自己钓的鱼存入鱼表。它首先申请了共享锁,因为在这个阶段它只是想读取鱼表中的一些信息,以便确定自己要存入的位置。此时,五只小猫都知道年底获得活鱼条数第一的可以得到猫王的头衔,竞争一下子激烈起来。花猫一边查看鱼表,一边盘算着自己还需要钓多少鱼才能在竞争中占据优势。其他小猫也时不时地试图获取共享锁来查看鱼表中的数据,大家都在暗暗较劲。

排他锁:当花猫确定好位置准备真正存入数据时,它申请了排他锁,确保在这个过程中没有其他小猫能同时进行写入操作。花猫认真地将自己的鱼存入鱼表,完成后释放了共享锁和排他锁。

意向锁:黑猫看到花猫操作完成,准备存入自己的鱼。它先申请了意向锁,向数据库表明自己有对鱼表进行操作的意向。这样可以让数据库更好地管理各种锁的层次关系。

间隙锁:在黑猫存入鱼的过程中,间隙锁可能会在某些情况下被触发,以防止其他事务插入在它要存入的位置之间。黑猫谨慎地操作着,确保自己的鱼能正确地存入鱼表。

插入意向锁:蓝猫也想存入鱼,它申请插入意向锁,表明自己想要在合适的位置插入数据。但由于黑猫还在进行写入操作,蓝猫只能等待。

临键锁:橘猫在查看鱼表中的数据时,可能会涉及到临键锁。它想了解其他小猫的钓鱼情况,以便自己更好地规划下一步的钓鱼策略。橘猫仔细地查看着鱼表中的信息。

然而,这些小猫除了钓鱼,还会吃自己钓的鱼。有一次,白猫想吃鱼了,它又向数据库申请了行级锁和排他锁,以确保在它查看和吃鱼的过程中,其他小猫不能同时进行操作。白猫查看了鱼表中自己钓的鱼的数量,然后吃了几条。吃完后,它释放了锁。

相关推荐
EatFan13 分钟前
Spring Boot 4 迁移避坑清单:Jackson 3、starter 拆分与最低 JDK 口径核对(含若依/芋道/CRMEB 升级对照)
java·数据库·spring boot·spring boot 4·java 21·jakarta ee 11·jackson 3
其实防守也摸鱼17 分钟前
渗透测试学习计划(全栈综合 · 零基础进阶)
android·数据库·学习·安全·oracle·自动化·学习方法
ZealSinger17 分钟前
Go1.25 FlightRecorder慢请求截trace
网络·数据库·go
帷幕落秋26 分钟前
Mysql的安装,加固与远程访问
运维·数据库
龙腾AI白云36 分钟前
【轻量化大模型:低成本AI落地的产业新范式】
大数据·数据库·人工智能·机器学习
计算机编程指导师38 分钟前
【计算机毕设选题】基于Hadoop的电信网络诈骗话术语义特征挖掘分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·数据库·python
IT古董1 小时前
《FDE前沿部署工程师实战教程》31 - Enterprise AI Reliability:Agent稳定性与生产运维体系
大数据·数据库·人工智能
IT毕设梦工厂1 小时前
计算机毕业设计选题推荐:基于大数据的巧克力销售数据分析与可视化|毕业设计选题|计算机毕设|选题推荐|毕设指导|项目定制|源码|高质量项目
大数据·hadoop·mysql·数据挖掘·数据分析·spark·课程设计
人丰1 小时前
SPC 上线前,先把并发和容量算清楚
数据库·制造·设计规范
重生之小比特2 小时前
【C++进阶】02 Linux基本指令
java·数据库·c++