求助,我不确定自己是否正确理解了数据库的锁机制?

作者站长头像
站长
· 阅读数 5

求后端前辈帮忙看一下我绘制的时序图中,我对数据库锁的理解是否正确???

今天看见一篇讲解 “先删除缓存还是先更新数据库” 的文章看不懂,

我主要是没搞懂“数据库的‘锁’机制”在“并发删除缓存+更新数据库”这个问题中,究竟是怎么运作的??

因为我在学习mysql时,了解到进行更新操作时,会加上互斥锁,所以理论上更新和查询操作必定是串行的,但按照这篇文章的描述,似乎出现了“数据库更新操作”与“数据库查询操作”同时发生的情况????

我绘制了如下的并发时序图,希望大家判断一下我对于数据库锁的的理解是否正确????

求助,我不确定自己是否正确理解了数据库的锁机制?求助,我不确定自己是否正确理解了数据库的锁机制?求助,我不确定自己是否正确理解了数据库的锁机制?

以下是原文链接,请各位大佬直接跳去阅读“「先删缓存,再更新数据库」”这段描述:https://mp.weixin.qq.com/s?__biz=MzU1NTA0NTEwMg==&mid=2247484...

我比较希望知道我绘制的详细版时序图是不是正确理解了数据库中的 “锁” 对于 “先删除缓存还是先更新数据库” 这个问题产生的影响。

回复
1个回答
avatar
test
2024-06-20
似乎出现了“数据库更新操作”与“数据库查询操作”同时发生的情况

mysql的读默认是非锁定读,也叫快照读,就是不加锁的,所以尽管当一条数据在更新的时候加了排他锁,但是读操作是不需要加锁的,所以读操作和更新操作可以同时进行,了解下mysql的MVCC机制。而当你使用select ... for update进行查询时,这时候就会加上排他锁,其他线程需要等待锁释放才能更新该数据

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容