Mysql update更新数据执行流程
update 的执行流程是以select查询为基础执行的!!你不明白select执行流程?没关系,这篇博客照样让你明白,update执行流程!
存储引擎是什么?
如果把数据库比作一个大仓库,那么存储引擎就是仓库的管理员
其主要职责:
1.存数据
决定数据以什么格式存在硬盘上(就像文件可以存txt、pdf、word不同格式)
2取数据
当你要查询时,决定怎么最快找到数据(就像有的管理员用分类标签,有的用条形码)
3.管事务
保证数据操作的安全(就像仓库进出货要登记,不能出错)
想要修改数据,首先要通过存储引擎层读取数据,把数据读取到服务层进行修改,在通过存储引层把数据传到数据库中
mysql每次读取16384个字节的数据 ,默认是16kb的数据,一页的数据。就像cpu与磁盘之间为什么会有内存一样,存储引擎与磁盘之间有一个buffer pool,引擎会从bufferpool中获取数据然后修改,再把修改的数据写道bufferpool中,然后bufferpool再传到数据库中!
流程是这样的:

好了,我们现在从bufferpool中读取到了数据,并对数据做了修改,存回到了bufferpool中,那数据从bufferpool到磁盘是怎么工作的?
1.要认识一个词语:脏数据。
只要是存储在bufferpool中的,还没有同步到磁盘中的数据称为脏数据
那我们最终目的就是把这些脏数据同步到磁盘中
2.刷脏机制(重要)
(1)当innodb中的脏页比例超过innodb_max_dirty_pages_pct_lwm的值时,这个时候innodb就会开始刷新脏页到磁盘
脏页比例?一个bufferpool的大小为128MB 上面说了,读取一页的数据大小为16KB,自脏页比例就很好理解啦!
(2)当innodb中的脏页比例超过innodb_max_dirty_pages_pct_lwm的值,而且还超过
innodb_max_dirty_pages_pct时,innodb就会进入勤快刷新模式,在这个模式下啊innodb会把脏页更快的刷新到磁盘中
(3)还有一种情况叫做sharp checkpoint ,当innodb要重用它之前的redo文件时,就会把innodb_buffer_pool中所有与这个文件有关的页面都要刷新到磁盘;这样做就有可能引起磁盘的IO风暴了,轻者影响性能,重者影响可用性。(redo文件???)
(4)innodb_max_dirty_pages_pct默认值为75,也就是说当脏页比例超过75%时才会进入勤快刷新模式。
innodb_max_dirty_pages_pct_lwm默认值是0,0对于innodb_max_dirty_pages_pct_lwm来说是一个特殊值,它表示不启用这个功能;由于没有启用这个功能,也就是说innodb_buffer_pool中的脏页比例会操持在75%左右。
当然啦,因"库"而吧是😁😁😁😁😁😁😁😁😁

好了大致流程就是这样那么,现在我们追求探讨关于数据安全的问题
1.如果数据从bufferpool传到磁盘的过程中,突然停电了,服务器挂掉了,导致修改的数据丢失该怎么办?
2.如果你想改名字为”张三“,却误改为”李四“怎么办?
解决第一个问题要使用redo log日志,其实就可以理解为一份备用数据,目的就是恢复崩溃的数据,所以在数据进行刷脏之前必须要先写入redo log日志

问题:数据没有直接存入到磁盘上,而是先存入到buffer pool中,然后再刷入磁盘,目的是为了性能考虑,但是现在有需要存入到redo log 日志的磁盘文件中,这样性能不就下降了?
答案:性能肯定是会有一些影响,但是需要保证数据可恢复的能力。写入redo log磁盘文件中的速度会更快一些。
随机磁盘IO和顺序磁盘IO的区别。
随机磁盘IO的情况是数据是会分散到不同的扇区去存储,因为底层是通过索引的顺序来存储,索引会存储到不同的扇区。那么更新数据的时候会增加寻道的时间,写入数据会变慢。
顺序磁盘IO是按着顺序追加写入的。
这是redo log 日志的位置:

解决第二个问题,无非就是进行一次撤回操作嘛,如何进行撤回操作呢,首先你得保存之间所做的操作:用undo log日志保存
undo log可以称为撤销日志或者回滚日志,站在事务的角度,undo log可以保证事务的原子性。
日志中记录的反向操作,例如:把username=”张三” 修改成了username=”赵四”,那么undo log中记录的是原来的值,即 username=”张三” 这样数据库再发生回滚操作的时候,可以把数据恢复回来。
通过命令查看相关的信息。
show VARIABLES like'%undo%';

undo log位置:

bin log 日志:
binary log 二进制日志,属于mysql服务层的日志。
binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志。
binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。
主要作用是主从复制和数据恢复的作用。
特点:
记录DDL和DML的语句,属于逻辑日志
没有固定大小限制,内容可以追加
Server层实现,可以被所有存储引擎使用
用于数据恢复和主从复制
可以使用命令查看
show GLOBAL VARIABLES like'%log_bin%';

最后用流程图来总结一下update执行流程吧!!!

相关文章:
Mysql update更新数据执行流程
update 的执行流程是以select查询为基础执行的!!你不明白select执行流程?没关系,这篇博客照样让你明白,update执行流程! 存储引擎是什么? 如果把数据库比作一个大仓库,那么存储引擎…...
WMS WCS系统架构
1.1立体仓库现场网络架构图 1.2立体仓库WMS系统与WCS系统架构 1.3系统技术选型 WEB端技术:node.js、vue 、element、jquery、html、js、css等 API端技术:spring boot 、msyql、redis、mybatis等 WCS技术:c#、winform、OPC、socket、S7等 …...
数据结构5(初):续写排序
目录 1、外排序 2、计数排序 1、外排序 上一节中提到的排序都可以用来进行内排序,但是只有归并排序的思想可以用来进行外部排序,因为文件数据是没办法像数组那样进行访问的。 例如: #include <stdio.h> #include <assert.h> …...
ROS多机通信(三)——Ubuntu Ad-Hoc 组网通信配置指南
基本概念 Ad-Hoc 网络是一种简单的点对点无线网络,设备(称为节点)可以直接相互通信或者通过中继间接通信,而无需依赖中央接入点。在这种网络中,所有设备是对等的,没有固定的路由器或基础设施支持。 特点 …...
23种设计模式-状态(State)设计模式
状态设计模式 🚩什么是状态设计模式?🚩状态设计模式的特点🚩状态设计模式的结构🚩状态设计模式的优缺点🚩状态设计模式的Java实现🚩代码总结🚩总结 🚩什么是状态设计模式…...
ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子)
ARM架构薄记2——ARM学习架构抓手(以ARMv7为例子) 架构学习需要学习哪一些部分呢?笔者接触过的架构有Intel-X86, AMD64,RISC-V和Arm架构(V7最多),笔者简单的翻了一些课本和教材,…...
STM32C011 进入停止模式和待机模式
对于STM32C011J4M3微控制器,你可以使用HAL库来实现进入停止模式(Stop Mode)和待机模式(Standby Mode)。下面是进入停止模式和待机模式的示例代码: 进入停止模式代码示例: #include "stm3…...
kaggle上经典泰坦尼克项目数据分析探索
之前了解在kaggle上这个项目很火,最近想要加强一下python数据分析,所以在kaggle上找到这个项目进行学习探索,下面是将一些学习资料以及过程整理出来。 一、首先我们了解一下项目背景以及如何找到这个项目。 kaggle项目地址: https://www.k…...
影刀魔法指令3.0:开启自动化新篇章
在数字化飞速发展的今天,自动化工具已经成为提升工作效率、优化工作流程的重要手段。影刀RPA作为一款强大的自动化软件,其最近推出的魔法指令3.0版本,更是让人大开眼界,为自动化操作带来了全新的可能性。 影刀魔法指令3.0简介 影…...
15 python 数据容器-字典
在 Python 的编程世界里,字典是一种超实用的数据类型,它就像打工人的工作资料夹,能把各种不同类型的信息有条理地存起来,还能快速找到你需要的内容。对于刚开始学习编程的小伙伴来说,掌握字典的用法,能让你…...
Linux的一些常见指令
一、ls指令 语法: ls (选项) 功能: ls可以查看当前目录下的所有文件和目录。 常用选项: -a:列出目录下的所有文件,包括以点(.)开头的隐含文件 。-d:将目录像文件一样显示,不显示其下的文件。…...
Pre-flash和Main flash
在相机拍照过程中,Pre-flash(预闪光) 和 Main flash(主闪光) 是常见的两种闪光灯使用模式,通常用于提高低光环境下的拍摄质量,尤其在自动曝光(AE)和自动对焦(…...
jmm-java内存模型
java内存模型----底层原理 底层原理 从Java代码到最终执行的CPU指令的流程: 最开始,我们编写的Java代码,是*.java文件在编译(javac命令)后,从刚才的*.java文件会变出一个新的Java字节码文件(…...
合宙780E开发学习-LUATOS-SOC云编译自定义固件
登录https://luatos.com 点击登录,使用合宙erp账号登录即可 点击右上角构建,点击右上角菜单新构建,自定义构建名称,可新建多个 勾选想要的组件 点击右上角保存修改,只有点击准备就绪(注意:一定…...
解决Centos使用yum命令报错“Cannot find a valid baseurl for repo: base/7/x86_64”问题
一、问题描述 我们在使用Centos7.9使用【sudo yum install influxdb2】命令安装influxDB数据库的时候提示“Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http://mirrorlist.centos.org/release=7&arch=x86_64&repo=os&infra=stock …...
好用的Markdown阅读编辑器Typora破解记录
Typora破解 一、下载Typora二、安装Typora三、破解Typora 😀 记录一下Typora破解记录,怕不常用忘记咯,感觉自己现在的脑子就像我的肠子一样,刚装进去就么得了。。。😔 Typroa算是用起来很舒服的Markdown阅读器了吧&am…...
c#在work线程中怎样更新UI控件
最近笔者调试修改项目,碰到了c#在work线程中怎样更新UI控件中的场景,简单总结了下,主要有两个方法: 方法1:通过System.Windows.Application.Current.Dispatcher.Invoke来更新UI控件 System.Windows.Application.Curre…...
RabbitMQ三种队列深度解析:区别、场景与未来趋势
嗯,用户让我分析RabbitMQ三种队列的区别、应用场景、技术原理和未来趋势,还要写一篇三千字的文章。首先,我需要回顾一下搜索结果,看看有哪些资料可用。 根据搜索结果,RabbitMQ的三种队列是经典队列(Classi…...
自然语言处理(13:RNN的实现)
系列文章目录 第一章 1:同义词词典和基于计数方法语料库预处理 第一章 2:基于计数方法的分布式表示和假设,共现矩阵,向量相似度 第一章 3:基于计数方法的改进以及总结 第二章 1:word2vec 第二章 2:word2vec和CBOW模型的初步实现 第二章 3:CBOW模型…...
WebSocket接入SSL证书
目录 碎碎念解决方法创建 HTTPS WebSocket 服务器创建系统服务启动服务 碎碎念 在访问网站时,使用 HTTPS 非常重要。HTTPS 协议不仅可以确保数据传输的安全性,还可以防止中间人攻击和数据篡改等安全问题。任何没有 SSL 证书的内容都可能会被拒绝访问。因…...
无人机宽带自组网机载电台技术详解,50KM超远图数传输系统实现详解
以下是关于无人机宽带自组网机载电台技术以及50KM超远图数传输系统实现的详解: 无人机宽带自组网机载电台技术详解 无人机宽带自组网机载电台是一种专门为无人机设计的通信设备,它支持宽带数据传输和自组网功能。这种电台的实现技术涉及多个方面&#x…...
MySQL 表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效
文章目录 联合索引 abc 均范围扫描时的索引生效情况无回表 表数据量非常少无回表 表数据量多有回表总结 联合索引 abc 均范围扫描时的索引生效情况 场景:表 t1 建立联合索引 (a, b, c),在 where a < ? and b > ? and c < ? 中哪些索引生效…...
Spring Boot定时任务设置与实现
Spring Boot定时任务设置与实现 在Spring Boot中,可以使用Scheduled注解来创建定时任务。以下是一个简单的示例,展示了如何在项目启动后每5秒调用一次指定的方法。 1. 添加依赖 首先,确保你的pom.xml文件中包含Spring Boot的依赖ÿ…...
#vue中解决异步请求的竞态
// composables/useFetchWithoutRace.js import { ref } from vue; import axios from axios;// 定义一个可复用的 Composition 函数,处理带有竞态控制的异步请求 export function useFetchWithoutRace() {// 定义响应式变量 latestRequestId,用于追踪最…...
BP神经网络+NSGAII算法(保真)
BP神经网络NSGAII算法 非常适合用来当作实验验证自己的结论,构建一个神经网络模型,并使用NSGAII多目标优化算法来实现多领域的毕业论文的设计。仅仅使用简单的matlab代码就可以实现自己的多目标优化任务。 BP神经网络算法 我的任务是预测三个变量的值…...
【CXX-Qt】4.1 extern “RustQt“
QObjects Properties Methods Signals #[cxx_qt::bridge] mod ffi {extern "RustQt" {} }extern “RustQt” 部分是 CXX-Qt 桥接的核心,用于声明 Rust 类型和签名,使其可用于 Qt 和 C。 CXX-Qt 代码生成器使用你的 extern “RustQt” 部…...
每日一题-力扣-2829. k-avoiding 数组的最小总和 0326
解决"k-avoiding 数组的最小总和"问题 这道题有两种主要解法。 解法一:直接数学计算(最优解) 通过数学推导直接计算出结果,不需要构建实际的数组。 class Solution:def minimumSum(self, n: int, k: int) -> int…...
React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误
大白话React 中的错误边界(Error Boundaries),如何使用它们捕获组件错误 在 React 里,错误边界就像是一个“小卫士”,专门负责在组件出现错误时挺身而出,避免整个应用因为一个小错误就崩溃掉。接下来我会详…...
OSI模型_TCP/IP模型_五层模型
文章目录 OSI模型_TCP/IP模型_五层模型模型对比模型层级对比关键区别对比 OSI模型OSI模型概述举例说明流程图示 TCP/IP 四层模型模型结构举例说明流程图示 TCP/IP 五层模型模型的结构举例说明流程图示 OSI模型_TCP/IP模型_五层模型 学OSI,用TCP/IP,分析选…...
HarmonyOS Next应用架构设计与模块化开发详解
引言 在HarmonyOS Next开发中,合理的应用架构设计和模块化开发是构建高效、可维护应用的关键。本文将深入探讨HarmonyOS Next应用的架构设计思路,并通过实际代码示例展示如何实现模块化开发。 应用架构设计 HarmonyOS Next应用通常采用分层架构设计&…...
