四川省建设厅官方网站贵州企业网站建设价格

news/2025/9/30 22:52:49/文章来源:
四川省建设厅官方网站,贵州企业网站建设价格,永久免费微商城小程序,自在源码网文章目录 1 问题描述2 验证2.1 验证猜想12.2 验证猜想2 3 结论4 mysql 为什么这么设计呢#xff1f; 1 问题描述 创建一张表t#xff0c;插入一行数据 mysql CREATE TABLE t ( id int(11) NOT NULL primary key auto_increment, a int(11) DEFAULT NULL ) ENGINEInnoDB… 文章目录 1 问题描述2 验证2.1 验证猜想12.2 验证猜想2 3 结论4 mysql 为什么这么设计呢 1 问题描述 创建一张表t插入一行数据 mysql CREATE TABLE t ( id int(11) NOT NULL primary key auto_increment, a int(11) DEFAULT NULL ) ENGINEInnoDB; insert into t values(1,2);现在表t中已经有id 1a2这一行 执行更新语句更新id1这一样将a的值修改为2逻辑上值不变 update t set a 2 where id 1;可以看到返回结果0 rows affected。 仅从现象上看mysql在处理这个条sql语句时可能是以下三种情况 命令执行到server层返回因为执行更新之前需要先读出数据server层的执行器拿到id1的这一行发现a2于是不会调用InnoDB修改行字段的接口直接返回。没加写锁命令执行到Innodb层返回server层调用了InnoDB修改行字段的接口InnoDB对数据加上了写锁然后进行当前读读出最新的a的值是2发现与旧值相同于是不更新直接返回。加了写锁没执行更新InnoDB认真执行了修改操作InnoDB对数据加上了写锁然后进行当前读读出最新的a的值是2发现与旧值相同但是还是执行了一次更新操作将2赋值给a然后记录到redo log中经过两阶段提交结束事务。也就是一个完整的正常的更新过程 2 验证 2.1 验证猜想1 猜想1很好验证如果没加写锁让事务A和事务B并发的执行更新语句如果后执行的事务没有被阻塞则证明猜想1正确。 时间事务A事务Bt0begin;t1begin;t2update t set a 2 where id 1;t3update t set a 2 where id 1;t4commit;t5commit; 事务A 事务B 事务B的update语句被阻塞等到事务A commit后才会提交。说明update过程中是加锁了的猜想1不正确。 2.2 验证猜想2 猜想2是加锁但是没有执行更新逻辑。可以采用InnoDBMVCC机制来验证MVCC就是在事务整个过程中会拿到一致性视图对普通读进行复用达到可重复读的隔离级别。 时间事务A事务Bt0begin;t1select * from t where id 1 // (1,2)t2begin;t3update t set a 3 where id 1;t4commit;t5select * from t where id 1 // (1,2)t6commit; 由于MVCC的机制且InnooDB引擎默认设置的隔离级别是可重复度所以事务A在开始的时候就会创建一致性视图整个事务过程中进行复用。 所以第一句select和第二句select查到的都是(1,2)因为事务B的更新对事务A是不可见的。 接下来我们对事务A再加一条更新的sql语句: 时间事务A事务Bt0begin;t1select * from t where id 1 // (1,2)t2begin;t3update t set a 3 where id 1;t4commit;t5update t set a 3 where id 1;t6select * from t where id 1 // (1,3)commit; t5时刻事务A执行了更新更新语句是当前读不是快照读所以更新语句会读取到当前表中最新的数据事务A读出来此时a3而自己要更新的也是3旧值与要更新的新值相同根据猜想2事务A此次更新不会执行。也就是InnoDB 的undo log中保留的行数据还是事务B更新的版本而这个版本的更新是对事务A是不可见的也就是后续的select语句读出来的结果应该还是(1,2)。但此时事务A读出来的结果却是(1,3)。说明猜想2错误InnoDB确实做了更新并记录了undo log 和 redo log。 3 结论 mysql要更新一条行记录是即使这条行记录的旧值与要更新的新值相同mysql也会按部就班地进行更新。 4 mysql 为什么这么设计呢 我想有以下几点原因 数据一致性InnoDB会按照用户要求的进行操作即使这个操作显而易见地可以优化比如要更新的值与旧值相同。这是为了保证数据一致性如果让InnoDB决定哪些操作需要跳过可能会导致数据不一致。事务因为update这条语句可能只是这个事务的其中一环如果这个语句不按照正常的更新流程走再发生事务回滚时就回滚不了。触发器如果有表触发器比如只要update执行了就触发的触发器如果innodb自行跳过这些触发器就不会执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Rust GUI开发入门】编写一个本地音乐播放器(10. 拼装UI组件) - Jordan

本系列教程对应的代码已开源在 Github zeedle 将前文写的零散的UI组件(歌曲列表/播放控制面板/歌词面板/设置面板)拼装起来,组成最终的音乐播放器UI,用TabWidget分成多标签页,每一个标签页分担不同的功能:export…

优易官方网站wordpress+快讯

Microsoft Visio 参与者 [actor] - 人的形状图标 1. 更多形状 -> 搜索形状2. 参与者References 1. 更多形状 -> 搜索形状 2. 参与者 References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

破解 Pycharm

破解 Pycharm破解工具:下载链接: https://pan.baidu.com/s/1C4BB55LXPxW4s9lZlFt4FA?pwd=s5jc 提取码: s5jc 破解完成后,这个目录依然不能删除,否则破解失效。所以可将该目录保存至一个很少打开的位置。 先执行…

个人网站申请备案iis7.5 没有默认网站

当我们在浏览器中输入一个URL并按下回车键时,背后其实发生了一系列的复杂过程。这个过程涉及到了网络协议、服务器处理、数据传输等多个环节。下面,我们将详细解析这一过程。 一、URL解析 当我们在浏览器中输入URL并回车后,浏览器首先会进行…

织梦网站地图底部漯河优惠网站建设价格

04数组矩阵 顺时针打印二维数组 0所在行列清零 z字形打印二维数组 找出边界为1的最大子方针 返回子数组最大累加和 子矩阵最大累加和 矩阵运算 顺时针打印二维数组 int[][] arr {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16},{17,18,19,20}};int r 0;int c 0;int…

网站的服务费账怎么做手表网站欧米茄

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录一、概念二、带权路径长度三、树的带权路径长度四、举…

网站域名怎么缴费深圳有多少互联网公司

算术平均数(average)是一组数据相加后除以数据的个数而得到的结果,是度量数据水平的常用统计量,在参数估计和假设检验中经常用到。比如:用职工平均工资来衡量职工工资的一般水平,用平均体重来观察某一人群体…

基于php的家具公司网站学设计师需要学历吗

俗话说“民以食为天”,吃饭一向是国人的头等大事,餐饮业也是经济的强劲助推力。新世纪以来,餐饮业不断讲述着热辣滚烫的商业故事。 2006年,拥有“必胜客”、“肯德基”等品牌的餐饮巨头百胜集团,组织两百多名区域经理…

CAP 8.4 版本发布通告

前言 今天,我们很高兴宣布 CAP 发布 8.4 版本正式版。从 8.3.0 版本以来,我们陆续发布了 5 个小版本,在这些版本中我们主要专注于提升系统性能、增强 Dashboard 功能、改进存储提供程序支持,并修复了一系列已知问题…

免费名片在线设计网站小程序外包公司发展前景

目前开发命名规范基本都遵循驼峰命名法,如:userName。我也不将这个规范的特性了,大家都明白。接下来进入正题,如何在python中取一个好名字,让你能更好的见名知意呢?1.元组(Tuple)类型变量命名在python中Tup…

【Leetcode】随笔 - 详解

【Leetcode】随笔 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &q…

STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现 - 教程

STM32 智能垃圾桶项目笔记(一):超声波模块(HC-SR04)原理与驱动实现 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

DevEco Studio 编辑器的使用 - 实践

DevEco Studio 编辑器的使用 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

docker安装MySQL8.0.25的坑

一、搜索拉取镜像 docker search mysql docker pull mysql #不写版本号 默认拉取最新版本 docker pull mysql:8.0.25 #写版本号,则拉取确定的版本二、查看镜像 docker images三、启动镜像 docker run -d --name mysql…

Powershell维护系统管理任务(五)

Powershell维护系统管理任务目录维护系统管理任务管理 AD 域服务管理组和组成员身份管理组创建新组管理组成员身份管理计算机帐户新建计算机帐户修复计算机账户的信任关系账户与设备管理cmdlet的区别管理组织单位和 AD…

百度的网站名山东省建设项目监理协会网站

前言: pad 是每个 element实例 都有的,是 elemenet 之间沟通的代理人,没有 pad 的 element 没法于其他element交流。 考虑到gstreamer存在继承体系,那么如果继承类element不在init函数里创建pad,那么在gst_element_l…

软件测试工程师面试刷题:简单JAVA算法题以及解法

软件测试工程师面试刷题:简单JAVA算法题以及解法找不同给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。示例 1: 输入:s =…

济南专业的设计网站免费网站建设 百度收录

NVIDIA Corporation 在 GitHub 的官方主页 References https://github.com/NVIDIA References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

蚌埠做网站有哪些公司买个域名

本文主要向大家详细介绍了jQuery的绑定事件和移除事件的使用方法和示例分享,这里推荐给有需要的小伙伴们参考下。有时候事件执行完了,想取消事件的效果可以通过一定的办法来处理。比如bind()(绑定事件)和unbind()(移除通过bind()方法添加的事件)方法来移…

巩义网站建设价格天津滨海新区落户政策

前言 这是我在这个网站整理的笔记,关注我,接下来还会持续更新。 作者:RodmaChen PostgreSQL--实现数据库备份恢复详细教学 一. 数据库备份二. 数据库恢复三. 存留问题 数据库备份恢复功能是每个产品所需的,以下是简单的脚本案例&a…