SQL在MySQL数据库中是如何执行的

今天和mysql视频教程栏目一起看看一条更新语句又是怎么一个执行流程。

SQL在MySQL数据库中是如何执行的

查询语句的一套执行流程,更新语句也会同样的走一步,下边我们在对照上次文章中的图来简单的看一下:

<img alt="

首先,在执行语句前要先连接数据库,这是第一步中连接器的工作,前面我们也说过,当一个表有更新的时候,跟这个表有关的查询缓存都会失效,所以我们一般不建议十月查询缓存。

接下来,分析器会经过语法分析和词法分析,知道了这是一条更新语句后,优化器决定要使用哪一个索引,然后执行器负责具体的执行,先找到这一行,然后做更新。

与查询语句更新不同的是,更新流程还涉及两个重要的日志,这个我们在前边的文章中也有专门的介绍,有兴趣的可以找一下上周的文章《MySQL的两个日志系统》,这里就不多做介绍了。

下边通过一个简单的例子来分析一下更新操作的流程。

我们先创建一张表,这个表有主键ID和一个整型字段c:

mysql> create table demo T (ID int primarty ,c int);复制代码

然后将ID=2的这一行的值加1

LuckyCola工具库 LuckyCola工具库

LuckyCola工具库是您工作学习的智能助手,提供一系列AI驱动的工具,旨在为您的生活带来便利与高效。

LuckyCola工具库 19 查看详情 LuckyCola工具库

mysql> update table demo set c = c + 1 where ID = 2;复制代码

接下来我们来看看update语句的执行流程,图中浅色框表示在存储引擎中执行的,神色框代表的是执行器中执行的。

SQL在MySQL数据库中是如何执行的

我们可以看到最后的时候,写redolog的时候分了两步,prepare和commit,这就是我们常说的“两阶段提交”。

为什么日志需要“两阶段提交”?

由于redo log和binlog分别是存储引擎和执行器的日志,是两个独立的逻辑,如果不用两阶段提交,无论先提交哪个后提交哪个都会存在一些问题。我们这里也借助上边的例子看一下,假设当前ID=2的这一行值为0 ,在update的过程中写完了第一个日志后,第二个日志还没写期间发生了crash,会怎么样?

先写redolog后写binlog。假设redolog写完,binlog还没写完,MySQL进程异常重启了。我们知道,redolog写完以后,系统即使崩溃了,也可以将数据恢复,所以在MySQL重启后,这一行回被恢复成1。由于binlog没写完就crash,这时候binlog里面是没有这个语句的,因此之后备份日志的的时候,存起来的binlog日志也没有这一条语句。当我们需要通过binlog来恢复数据的时候,由于binlog丢失了这条语句,恢复出来的这一行的值就是0,与原库的值不一样啦。先写binlog后写redo log。如果写完buglog之后,redo log还没写完的时候发生 crash,如果这个时候数据库奔溃了,恢复以后这个事务无效,所以这一行的值还是0,但是binlog里已经记载了这条更新语句的日志,在以后需要用binlog来恢复数据的时候,就会多了一个事务出来,执行这条更新语句,将值从0更新成1,与原库中的0就不同了。

我们可以看到如果不使用“两阶段提交”,那么数据库的状态就会和用日志恢复出来的库不一致。虽然平时用日志恢复数据的概率比较低,但是用日志最多的还是扩容的时候,用全量备份和binlog来实现的,这个时候就可能导致线上的主从数据库不一致的情况。

相关免费学习推荐:mysql视频教程

以上就是SQL在MySQL数据库中是如何执行的的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/294396.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2026年10月22日 10:31:47
js对象模式如何理解
下一篇 2025年12月21日 02:10:48

相关推荐

  • 一起了解什么是MySQL数据库

    一起了解什么是MySQL数据库一起了解什么是MySQL数据库一起了解什么是MySQL数据库一起了解什么是MySQL数据库

    免费学习推荐:mysql视频教程 目录 库相关内容表的详细操作数据类型枚举与集合存储引擎(了解即可) 库相关内容 MySQL一些默认库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息、列信息、权限信息、字符信息等 performance_…

    2026年10月21日 • 用户投稿
    000
  • 如何执行一条SQL更新语句?

    如何执行一条SQL更新语句?如何执行一条SQL更新语句?如何执行一条SQL更新语句?如何执行一条SQL更新语句?

    本篇文章给大家介绍一下执行一条sql更新语句的流程。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 一、前言 前面我们系统了解了一个查询语句的执行流程,并介绍了执行过程中涉及的处理模块。相信你还记得,一条查询语句的执行过程一般是经过连接器、分析器、优化器、执行器等功能模块,最后到达…

    2026年10月21日 • 用户投稿
    000
  • HTML格式文件怎么导入SQL

    HTML格式文件怎么导入SQLHTML格式文件怎么导入SQLHTML格式文件怎么导入SQLHTML格式文件怎么导入SQL

    导入方法:首先打开软件,打开指定数据库;然后选中要导入数据的数据表,点击鼠标右键,在弹出的菜单中选择“导入向导”;接着导入指定文件,设置目标字段与源字段的对应关系;最后选择一种导入模式,点击“开始”即可。 本教程操作环境:windows7系统、Navicat Premium版本、Dell G3电脑。…

    2026年10月21日 • 用户投稿
    200
  • MySQL运行SQL文件时出现问题怎么办

    MySQL运行SQL文件时出现问题怎么办MySQL运行SQL文件时出现问题怎么办MySQL运行SQL文件时出现问题怎么办MySQL运行SQL文件时出现问题怎么办

    本篇文章给大家介绍一下mysql运行sql文件时出现问题的解决方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 参考:Mysql错误:check the manual that corresponds to your MySQL server version for the r…

    2026年10月21日 • 用户投稿
    1000
  • sql语句中的with as该怎么用

    sql语句中的with as该怎么用sql语句中的with as该怎么用sql语句中的with as该怎么用sql语句中的with as该怎么用

    with as短语,也叫做子查询部分,可以定义一个sql片断,该sql片断会被整个sql语句用到。可以使sql语句的可读性更高,也可以在union all的不同部分,作为提供数据的部分。 –针对一个别名 with tmp as (select * from tb_name) –针对多个别名 with…

    2026年10月20日 • 用户投稿
    000
  • MySQL中怎么使用SQL语句修改数据

    一、修改表中的数据 要更改 MySQL 数据表中的数据,可以使用 UPDATE 语句完成。下面是一个示例: UPDATE students SET name = ‘Tom’ WHERE id = 1; 上面的语句将 students 表中 id 为 1 的记录的 name 字段修改为 “…

    2026年10月14日
    200
  • Linux系统下怎么使用Mysql导入SQL文件

    新建空数据库mysql>create database abc; mysql>create database abc; 导入数据库方法一: 1、选中刚才新建的数据库 mysql>use abc; 2、对数据库进行编码设置 白果AI论文 论文AI生成学术工具,真实文献,免费不限次生成…

    2026年10月14日
    200
  • MySQL调优之SQL查询深度分页问题怎么解决

    MySQL调优之SQL查询深度分页问题怎么解决MySQL调优之SQL查询深度分页问题怎么解决MySQL调优之SQL查询深度分页问题怎么解决MySQL调优之SQL查询深度分页问题怎么解决

    一、问题引入 例如当前存在一张表test_user,然后往这个表里面插入3百万的数据: CREATE TABLE `test_user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘主键id’, `user_id` varchar(36) NOT …

    2026年10月14日 • 用户投稿
    100
  • 如何高效构建复杂SQL查询?SprykerSQLCriteriaBuilder助你轻松驾驭动态规则

    在开发电商平台或内容管理系统时,我们经常需要根据用户的选择、后台配置的规则,甚至复杂的业务逻辑来动态生成数据库查询。例如,用户在前端进行多维度筛选(按价格、品牌、类别),或者后台配置复杂的促销规则(满足A条件且B条件,或满足C条件),这些都需要灵活地构建SQL语句。 传统的做法往往是手动拼接sql字…

    2026年10月13日
    200
  • MySQL中sql语句有哪些

    MySQL中sql语句有哪些MySQL中sql语句有哪些MySQL中sql语句有哪些MySQL中sql语句有哪些

    以下两个表格做讲解 SELECT SELECT “字段” FROM “表名”;SELECT Store_Name FROM Store_Info;显示表格中的一个或数个字段的所有数据记录 DISTINCT SELECT DISTINCT “字段” FROM “表名”;select distinct …

    2026年10月12日 • 用户投稿
    200
  • MySQL中怎么使用SQL语句判断表是否存在

    判断表是否存在的SQL语句如下: SHOW TABLES LIKE ‘table_name’; 其中,table_name是要判断是否存在的表的名称。 如果该表存在,则会返回一个结果集,否则将返回一个空结果集。可以通过判断结果集的长度来确定表是否存在。 下面是一个基本的PHP函数,用于在MySQL中…

    2026年10月12日
    100
  • mysql中SQL的概念是什么

    1、SQL是结构化查询语言。 DML 数据操纵语言 用来操作数据库中所包含的数据 INSERT UPDATE DELETE DDL 数据定义语言 用于创建和删除数据库对象等操作 CREATE DROP ALTER DQL 数据查询语言 用来对数据库中的数据进行查询 SELECT DCL 数据控制语言…

    2026年10月12日
    100
  • 使用Go语言进行MySQL数据库的数据外部加密的方法

    随着数据泄露事件的不断发生,数据安全问题越来越受到重视。数据库中存储的数据是非常重要的,因此数据加密已成为了安全保护的一个重要手段。本文将介绍如何使用go语言进行mysql数据库的数据外部加密,从而提升数据的安全性。 一、什么是数据外部加密 在传统的加密方式中,将数据加密后存储在数据库中,需要在查询…

    2026年10月9日
    200
  • MySQL数据库和Go语言:如何进行数据分类处理?

    随着数据量的持续增长和大规模化应用的普及,如何对数据进行有效的分类处理已成为了一项重要的任务。mysql数据库和go语言是如今比较流行的数据存储和编程语言,二者的配合使用可以帮助我们高效地实现数据分类处理的目标。 MySQL数据库是一款开源的、关系型数据库管理系统,其支持多种数据类型,包括整数、浮点…

    2026年10月9日
    200
  • Go语言和MySQL数据库:如何进行数据角色属性划分?

    随着大规模应用的普及和互联网技术的快速发展,数据库已成为数据存储、管理和检索的必备工具。 mysql 是开源免费的关系型数据库管理系统,与此同时,go 语言由于其高并发性能等优点也被越来越多的开发者所青睐。在应用场景中,数据角色与数据属性起着重要的作用,为了更好地进行数据管理,需要对不同数据角色的属…

    2026年10月9日
    100
  • 使用Go语言进行MySQL数据库的数据查询排序的方法

    随着数码科技的不断发展,我们生活中所使用的大量数据不断积累。为了能够更加高效地利用这些数据,我们需要在系统开发中使用数据库进行数据的存储、查询和处理。其中,mysql作为一种常用的关系型数据库管理系统,被广泛地应用于各种应用场景中。 随着数据量的增加,如何对MySQL数据库进行排序成了一个非常重要的…

    2026年10月9日
    000
  • Go语言和MySQL数据库:如何进行数据角色划分?

    go语言和mysql数据库:如何进行数据角色划分? 在现代软件开发中,数据角色划分是一个非常重要的部分。它涉及到软件开发中涉及的所有关键方面,例如安全、数据完整性和用户管理等。在本文中,我们将讨论如何使用Go语言和MySQL数据库来进行数据角色划分。 什么是数据角色划分? 数据角色划分是将数据分为不…

    2026年10月9日
    000
  • 使用Go语言进行MySQL数据库的数据导出的方法

    在软件开发的过程中,我们经常需要做数据导入和导出的操作。在mysql数据库中,数据导出是非常常见的需求。它可以让我们把数据库中的数据导出到其他系统中进行分析和处理。本文介绍了使用go语言进行mysql数据库的数据导出的方法。 安装Go语言和MySQL驱动程序 首先,你需要安装Go语言和MySQL驱动…

    2026年10月9日
    000
  • Go语言和MySQL数据库:如何进行数据中心化处理?

    随着云计算和大数据技术的迅猛发展,数据中心化处理成为越来越多企业和开发者的关注点。在这样的背景下,go语言和mysql数据库也成为了很多人选择的技术方案。本文将从go语言和mysql数据库的特点入手,详细介绍如何进行数据中心化处理。 一、Go语言的特点 Go语言是Google公司推出的一种静态编程语…

    2026年10月9日
    000
  • 如何使用Go语言进行可靠的MySQL数据库连接?

    随着大量的数据需要存储和处理,mysql已经成为了应用开发中最常用的关系型数据库之一。而go语言由于其高效并发处理和简洁的语法,也越来越受到开发者的欢迎。本文就将带领读者通过go语言实现可靠的mysql数据库连接,让开发者能够更加高效地查询和存储数据。 一、Go语言连接MySQL数据库的几种方式 G…

    2026年10月9日
    000

发表回复

登录后才能评论
关注微信