好了,愉快的装13结束了 , 兄弟们 , 下次见 。
mysql原理(十) 当前读与快照读 首先我们做一个模拟 , 执行以下的sql,其中有如下图数据:
我把执行结果按照表格如下展示:
分析:
在会话1当中,只有当会话1的事务提交后,才能查到最终会话2更改的数据 。
在会话2当中,开启事务后更新数据,之后查询发现数据变成了17 。
针对上面的现象我们进行个原理分析:
实际上产生上述显现是因为InnoDB采用的MVCC(多版本并发控制) , 其中针对每条数据会有它自己的事务id,以及一个最大事务id 。针对事务中数据每次修改,会产生不同的版本 。
1)假设开始id = 2的数据 , 其事务txid = 1000;
2)当会话1开始 , 此时txid变成了1001,而会话2开启,txid又变成了1002,同理会话3会变成1003,此时都生成了不同版本的快照 。
3)会话1在事务当中去读取时候,采用了快照读的方式,即拿到一个1001的事务id,此时只会读取小于等于自己版本的数据,所以在事务中最终只能拿到值为17的数据 。
4)会话2在更新数据的时候 , 采用的当前读的方式,即对数据增加X锁,获取最新的事务id,读取最新的版本数据 。所以在更新之前,就读取到了age的年龄是16,之后在进行+1,得到17.
总结一下:
快照读 解决了幻读的问题,即多次读取数据不一致的问题 。
update、insert、delete都会执行 当前读 , 防止并发更新数据导致数据错误,此过程或添加X锁 。
关于mysql怎么查原理和mysql怎么查询的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息 , 记得收藏关注本站 。
推荐阅读
- redis被拒绝连接数怎么查,提示redis连接拒绝
- 怎么让电脑使用独立显卡,怎么让电脑使用独立显卡功能
- 多人整人动作游戏,多人整人动作游戏视频
- pg提取安装包,ios如何提取安装包ipa
- java求e代码 java代码示例
- 做学校公众号怎么变现的,学校公众号运营工作怎么做
- 网页里的东西怎么移到u盘,网页里的东西怎么移到u盘里面
- python函数的创建 python 创建函数
- 哔哩哔哩css3和canvas,哔哩哔哩html5播放器