mysql 十把锁之《小猫钓鱼》

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

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

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

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

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

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

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

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

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

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

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

相关推荐
ZTLJQ2 小时前
数据的基石:Python中关系型数据库完全解析
开发语言·数据库·python
升鲜宝供应链及收银系统源代码服务2 小时前
《IntelliJ + Claude Code + Gemini + ChatGPT 实战配置手册升鲜宝》
java·前端·数据库·chatgpt·供应链系统·生鲜配送
跟着珅聪学java3 小时前
js编写中文转unicode 教程
前端·javascript·数据库
小江的记录本3 小时前
【Redis】Redis全方位知识体系(附《Redis常用命令速查表(完整版)》)
java·数据库·redis·后端·python·spring·缓存
还是做不到嘛\.3 小时前
Dvwa靶场-SQL Injection
数据库·sql·web安全
楼田莉子4 小时前
MySQL数据库:MySQL的数据类型
数据库·学习·mysql
2401_879693874 小时前
数据分析与科学计算
jvm·数据库·python
LJianK15 小时前
java封装
java·前端·数据库
知识分享小能手5 小时前
MongoDB入门学习教程,从入门到精通,MongoDB查询(4)
数据库·学习·mongodb
LSL666_6 小时前
MybatisPlus条件构造器(上)
java·数据库·mysql·mybatisplus