mysql 十把锁之《小猫钓鱼》

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

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

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

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

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

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

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

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

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

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

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

相关推荐
杨云龙UP4 小时前
SQL Server2022部署:Windows Server 2016下安装、SSMS配置、备份还原与1433端口放通全流程_20260508
运维·服务器·数据库·sql·sqlserver·2022
墨染天姬5 小时前
【AI】cursor提示词小技巧
前端·数据库·人工智能
古月-一个C++方向的小白6 小时前
MySQL数据库——数据类型
android·数据库·mysql
qq_413502027 小时前
如何创建CDB公共用户_C##前缀强制规则与CONTAINER=ALL
jvm·数据库·python
逸Y 仙X7 小时前
文章二十七:ElasticSearch ES查询模板(Search Template)高效复用实战
java·大数据·数据库·elasticsearch·搜索引擎·全文检索
m0_738120727 小时前
应急响应(重点)——记一次某公司流量应急溯源分析(附带下载链接)
服务器·前端·数据库·安全·web安全·网络安全
yexuhgu7 小时前
CSS如何利用-checked实现纯CSS手风琴折叠_通过状态选择器控制区域高度
jvm·数据库·python
2301_779622418 小时前
mysql如何通过主从备份实现读写分离_配置mysql架构模式
jvm·数据库·python
m0_741173338 小时前
HTML5中WebSocket在弱网环境下的延迟抖动算法补偿
jvm·数据库·python