返回顶部
首页 > 资讯 > 数据库 >MySQL中的数据编辑过程中涉及的两阶段提交分别是什么
  • 724
分享到

MySQL中的数据编辑过程中涉及的两阶段提交分别是什么

2024-04-02 19:04:59 724人浏览 薄情痞子
摘要

这期内容当中小编将会给大家带来有关Mysql中的数据编辑过程中涉及的两阶段提交分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。mysql 数据库中的两阶段提交,不

这期内容当中小编将会给大家带来有关Mysql中的数据编辑过程中涉及的两阶段提交分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

mysql 数据库中的两阶段提交,不知道您知道不?这就简单的聊一聊 Mysql  数据库中的两阶段提交,两阶段提交发生在数据变更期间(更新、删除、新增等),两阶段提交过程中涉及到了 MySQL 数据库中的两个日志系统:redo 日志和  binlog 文件。

redo 日志前面已经介绍过了,就不再介绍了,简单的聊一聊 binlog 文件,binlog 是 MySQL Server  层提供的二进制文件,因此所有的存储引擎都可以使用 binlog 功能,binlog  是追加写的逻辑日志,记录了执行语句的原始逻辑,文件写到指定大小后会切换到下一个文件继续写,并不会覆盖以前写过的日志文件。

binlog 日志文件主要用于数据恢复和集群环境下各服务器之间的数据同步,在工作中,我们误删了数据或者表之类,如果需要恢复的话都是利用 binlog  日志来恢复的,所以 binlog 日志是 MySQL 数据库中比较重要的模块。

知道这两个日志之后,我们把重点回到 MySQL  数据库两阶段提交,前面我们说了两阶段提交发生在数据变更期间,为了更好的理解两阶段提交,我们用一条更新命令来加以说明,更新语句如下:

mysql> update T set c=c+1 where id=2;

假设未更新前 id=2 的这行数据 c 的值为 0 ,这条更新语句在 MySQL 数据库内部是如何执行的呢?在下面这张执行流程图:

MySQL中的数据编辑过程中涉及的两阶段提交分别是什么

update 语句执行流程

从流程图中可以看出,在 InnoDB 存储引擎下,一条 update 语句在 MySQL 内部执行大概会经历下面五个步骤:

1、执行器先找引擎取 id=2 这一行数据,如果 ID=2  这一行所在的数据页本来就在内存中,就直接返回给执行器;否则,需要先从磁盘读入内存,然后再返回。

2、执行器拿到引擎给的行数据,把这个值加上 1,比如原来是 N,现在就是 N+1,得到新的一行数据,再调用引擎接口写入这行新数据。

3、引擎将这行新数据更新到内存中,同时将这个更新操作记录到 redo log 里面,此时 redo log 处于 prepare  状态。然后告知执行器执行完成了,随时可以提交事务

4、执行器生成这个操作的 binlog,并把 binlog 写入磁盘。

5、执行器调用引擎的提交事务接口,引擎把刚刚写入的 redo log 改成提交(commit)状态,更新完成。

在这五步中,注意用红颜色标出来的部分,redo 日志被分割成 prepare 和 commit 两个阶段提交,这个过程称为两阶段提交,不将 redo  日志拆分成两步提交行不行?

我们可以用反推法来证明,假设不使用两阶段提交,那么就有两种情况,一种是先提交 redo 日志再提交 binlog 日志,另一种是先提交 binlog  日志再提交 redo 日志,一起来看看这两种提交方式有什么问题?

先写 redo log 后写 binlog。假设在 redo log 写完,binlog 还没有写完的时候,MySQL  进程异常重启。在这个过程中更新发生了异常,redo 日志是可以在数据库发生异常是保证数据的持久性,启动后经过 redo 日志数据恢复后 c 的值是 1,但是  binlog 并没有写完,所以在 binlog 日志文件中并没有记录这条更新语句,如果用这个 binlog 日志文件来恢复临时库的话,恢复出来 id =2  的这行数据的 c 的值为 0,与原库的值就不一致了。

先写 binlog 后写 redo log。如果在 binlog 写完, redo 日志还没写,系统崩溃,系统重启后,id=2 的这行数据的 c  的值还是为 0,但是在 binlog 日志文件中却记录了这次更新,如果需要用 binlog 日志文件来恢复临时库的话,那么 id=2 的这行数据 c 的值就为  1,这样与原库的值就不一致了。

从这两个假设中,我们可以看出无论先提交那个日志文件都有可能出现数据不一致的现象,日志文件两阶段提交技术就解决了redo 日志和 binlog  日志文件记录数据不一致的问题,从而保证了在数据恢复时数据的一致性。

上述就是小编为大家分享的MySQL中的数据编辑过程中涉及的两阶段提交分别是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网数据库频道。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中的数据编辑过程中涉及的两阶段提交分别是什么

本文链接: https://lsjlt.com/news/68311.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL中的数据编辑过程中涉及的两阶段提交分别是什么
    这期内容当中小编将会给大家带来有关MySQL中的数据编辑过程中涉及的两阶段提交分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。MySQL 数据库中的两阶段提交,不...
    99+
    2024-04-02
  • MySQL的两阶段提交机制是什么
    本文小编为大家详细介绍“MySQL的两阶段提交机制是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL的两阶段提交机制是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2023-02-11
    mysql
  • Mycat分布式事务两阶段提交过程是怎样的
    本篇文章为大家展示了Mycat分布式事务两阶段提交过程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 两阶段提交过程可以用以下图...
    99+
    2024-04-02
  • mysql数据库中的存储过程是什么
    这篇文章给大家分享的是有关mysql数据库中的存储过程是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语...
    99+
    2024-04-02
  • 计算机程序中断处理过程的五个阶段是什么
    小编给大家分享一下计算机程序中断处理过程的五个阶段是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!中断处理过程的五个阶段:1、中断请求阶段;2、中断判优阶段,有硬件判优和软件判优两种方法;3、中断响应阶段,CPU向中断...
    99+
    2023-06-14
  • Mysql中存储过程和函数的区别是什么
    这篇文章主要介绍了Mysql中存储过程和函数的区别是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。数据库设计三范式:第一范式:数据库表的每一...
    99+
    2024-04-02
  • C#数据库编程中SqlDataAdapter与DataSet的区别是什么
    这篇文章主要介绍“C#数据库编程中SqlDataAdapter与DataSet的区别是什么”,在日常操作中,相信很多人在C#数据库编程中SqlDataAdapter与DataSet的区别是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好...
    99+
    2023-06-18
  • MySQL中最适合用于性别字段的数据类型是什么?
    在MySQL中,最适合用于性别字段的数据类型是ENUM枚举类型。ENUM枚举类型是一种允许定义一组可能取值的数据类型,性别字段适合使用ENUM类型是因为性别通常仅有两个取值,即男和女。...
    99+
    2024-03-15
    mysql 数据类型 性别字段
  • MySQL中的视图、存储函数、存储过程、触发器分别是什么
    这篇文章主要讲解了“MySQL中的视图、存储函数、存储过程、触发器分别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL中的视图、存储函数、存储过程、触发器分别是什么”吧!目录一...
    99+
    2023-06-20
  • MySQL数据库中逻辑架构的原理是什么
    MySQL数据库中逻辑架构的原理是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、笼统的逻辑架构先给出一张逻辑架构图,这...
    99+
    2024-04-02
  • MySQL中查询事物与DDL引发Waiting for table metadata lock的两个阶段是什么
    这篇文章将为大家详细讲解有关MySQL中查询事物与DDL引发Waiting for table metadata lock的两个阶段是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后...
    99+
    2024-04-02
  • MySQL中有三种删除数据的方式分别是什么
    小编给大家分享一下MySQL中有三种删除数据的方式分别是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在 MySQL 中有三...
    99+
    2024-04-02
  • 在数据库设计中将er图转换成关系数据模型的过程属于什么阶段
    小编给大家分享一下在数据库设计中将er图转换成关系数据模型的过程属于什么阶段,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在数据...
    99+
    2024-04-02
  • MySQL中使用XML数据过程是怎么样的
    这篇文章给大家介绍MySQL中使用XML数据过程是怎么样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。  在MySQL中使用XML数据可以更好的管理数据,将所有数据进行了格式化,这个...
    99+
    2024-04-02
  • J2ME编程中的几个重要概念分别是什么
    J2ME编程中的几个重要概念分别是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。我们都知道,Java ME 以往称作J2ME(Java Platform,Micro Edi...
    99+
    2023-06-17
  • VB.NET Main过程中的四种声明方法分别是什么
    本篇文章为大家展示了VB.NET Main过程中的四种声明方法分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。VB.NET编程语言的应用范围非常广泛,其编写方式的特殊性极大的吸引了编程人员的...
    99+
    2023-06-17
  • 最常用的三大中文数据库分别是什么
    这篇文章主要介绍最常用的三大中文数据库分别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!最常用的三大中文数据库是:“MySQL”、“SQL Server”、“Oracle”。“...
    99+
    2024-04-02
  • oracle中存储函数与存储过程的区别是什么
    这期内容当中小编将会给大家带来有关oracle中存储函数与存储过程的区别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一:存储过程:简单来说就是有名字的pl/sql...
    99+
    2024-04-02
  • 什么是Java编程中的数据结构和算法?
    Java编程中的数据结构和算法是指在Java编程中,使用各种数据结构和算法来解决问题。数据结构是指在计算机科学中,用来组织和存储数据的方式和方法,而算法是指用来解决问题的一系列步骤和规则。 Java是一种面向对象的编程语言,其内置了许多数据...
    99+
    2023-09-25
    编程算法 laravel 对象
  • 大数据编程算法中,Python和Apache的编程优势是什么?
    随着科技不断发展,大数据分析已经成为了当今商业领域中非常重要的一部分。而在大数据编程算法中,Python和Apache的编程优势也备受关注。本文将探讨Python和Apache在大数据编程算法中的优势,并介绍一些演示代码。 一、Python...
    99+
    2023-08-26
    apache 大数据 编程算法
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作