【数据库】悲观锁与乐观锁与MySQL的MVCC实现简述
悲观锁
悲观锁,就是一种悲观心态的锁,每次访问数据时都会锁定数据:
乐观锁
乐观锁,就是一种乐观心态的锁,每次访问数据时并不锁定数据,期待数据并没作修改,如果数据没被修改则作具体的业务
应用程序上使用乐观锁的思想
MySQL的MVCC实现
多版本并发控制,MVCC
,Multi Version Concurrent Control
,用于实现非锁定的读操作。
MySQL的InnoDB的可重复读隔离级别中是通过在每条记录中加创建版本
和删除版本
两列来实现,这两列的值是事务的版本号。
- Insert操作,
创建版本
为当前事务ID - Delete操作,
删除版本
为当前事务ID - Update操作,原记录的
删除版本
为当前事务ID,新增一条更新后的记录的创建版本
为当前事务ID
数据的样式大概如下图:
如果需要查询某个事务版本的数据,逻辑如下SQL(只是用SQL表示此逻辑以便理解,内部并非这样实现):
select * from table where 创建版本 <= 当前版本 and (删除版本 is null or 删除版本 > 当前版本);
问题:可重复读中MVCC如何保证第1次查询和第2次查询的一致性?
作者:Nick Huang 博客:http://www.cnblogs.com/nick-huang/
本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。
如果本文对您有用,点赞或评论哦;如果您喜欢我的文章,请点击关注我哦~
本博客为学习、笔记之用,以笔记形式记录学习的知识与感悟。学习过程中可能参考各种资料,如觉文中表述过分引用,请务必告知,以便迅速处理。如有错漏,不吝赐教。
如果本文对您有用,点赞或评论哦;如果您喜欢我的文章,请点击关注我哦~
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战