MySQL InnoDB引擎四大特性ACID实现方案分析

文章目录

    • 概要
    • InnoDb引擎ACID模型的实现方案
    • 小结

概要

对于Mysql,事物的支撑并不依赖于Server层,不同的存储引擎对于事物的支持也不一样,对于我们常用的InnoDB引擎,其提供了一套基于【ACID模型】的事物完整的解决方案。为什么MyISAM不支持事务了,因为MyISAM并没有基于ACID模型去提供整套的解决方案

所谓的ACID模式,就是我们常说的事物的四大特性。假如我问一个问题:事物和锁之间是什么关系?事物大家都知道,锁大家也都知道,但是这两个放在一块大家就不知道了,感觉有关系,但又说不上来哪里有关系。通过下面的文章分析,大家就能清晰的认识到他们两个之间的关系了。而不是网上给大家提供的模糊性的回答,锁是事物实现的一种机制这种。

  • 原子性(Atomicity)
    对于每个事务都是一个不可分割的最小工作单元,整个事务中的所有操作要么全部成功,要么全部失败,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

  • 一致性(Consistency)
    数据库从一个一致性的状态转换到另外一个一致性的状态。举个转账的例子:张三给李四转账100块,张三的账户扣减100,李四账户新增100,这个数据的总量的一致就是一致性的解释。不会转账失败而导致这个总量100出现不一致。

  • 隔离性(Isolation)
    隔离性是指当多个事务同时对数据库进行操作时,每个事务都是独立的,一个事务的操作不会影响到其他事务,对于不同的隔离级别,隔离性的实现方案也有所不同。

  • 持久性(Durability)
    一旦事务提交,则其所做的操作就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。

虽说是四大特性,但是他们之间并不平级,AID都是为了C(一致性服务的)
在这里插入图片描述

InnoDb引擎ACID模型的实现方案

  • 原子性的实现方法
    为了实现原子性的操作,InnoDB引擎在每次执行增删改查时,都需要先记录作反向操作undoLog,当执行过程中出现了异常,就会执行undoLog当中将sql的反向操作。这样就相当于所有的操作都没有执行,保证原子性。

  • 隔离性的实现方案
    隔离性分为写+写隔离,写+读隔离。写+写隔离通过锁来实现,写+读隔离通过MVVC来实现。
    为什么不能直接通过锁来实现隔离性了?这个就设计到多线程并发访问的问题。举个例子:如果我们只通过锁来解决隔离性,假设我们的隔离级别为可重复读。如下图:不论怎么利用锁,我们都是无法在二次读取时还能读取到zhangsan这个数据。有的小伙伴可能说,我可以加一个S锁呀,防止其他的线程加X锁。但是这样的话执行流程不就串行化了嘛,其他线程想修改数据必须得等S锁释放,不然会被阻塞。所以为了应对这种场景,我们就引入了MVCC机制。
    在这里插入图片描述

  • 持久性解决方案
    mysql在哪些执行过程会导致持久性异常了?我们在写数据时,mysqlServer端正打算往数据库的idb文件当做做刷盘处理时,机器突然异常掉电或者其他的意外,在没有持久性解决方案时就会出现刷盘异常,此时我们就需要引入redoLog来实现持久性解决方案。

  • 一致性的解决方案依托于上面的三个解决方案,当保证了AID的,我们的一致性就解决了

小结

基于上述的理解,我们就可以知道mysql的事物的四大特性的实现方案,也清楚了为什么只有InnoDB引擎才能实现事务,而MyISAM不支持事务的原因。因为InnoDB引擎基于事务的四大特性都实现了具体的解决方案,如果其他的存储引擎如果想要满足事务的话,也可以去根据ACID模型去实现自己的解决方案即可。而且通过分析我们也大致了解,InnoDB通过什么技术方案去实现了ACID模型。方便我们对于事物,锁这有都有一个基础的认知,我们需要对这些概念清晰了,后续才可以更方便的学习。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初识C++:开启C++之旅

目录 1.C的第一个程序 2.namesapce命名空间域 2.1namespace的意义 2.2.2namespace的定义 2.3命名空间的使用 3.C输入/输出 4.缺省参数 5.函数重载 6.引用 6.1引用的特性 6.2引用的使用 1.C的第一个程序 c版本&#xff1a; #include<iostream>using std::cout…

线性代数:每日一题1/特征值与相似对角化

设A, B 为二阶矩阵&#xff0c;且 AB BA , 则“A有两个不相等的特征值”是“B可对角化"的&#xff08;&#xff09; A. 充分必要条件 B. 充分不必要条件 C.必要不充分条件 D.既不充分也不必要条件 知识点&#xff1a; 特征向量与特征值的关系 相似矩阵的定义和性质 n阶…

计算机网络之TCP序号,确认序号和报文传输时间

开篇提示 本篇适合于了解基础知识&#xff0c;进行扩展提高的使用&#xff0c;附带考研习题以及解析。 TCP序号和确认序号的区别 TCP首部中有序号和确认序号&#xff0c;他们都是4个字节&#xff08;4B&#xff09;&#xff0c;且在数据传输中有很重要的意义&#xff0c;那么两…

【后端记录】修复MySql的错误修改的数据记录【binlog修复】

前言 今天入门后端的时候&#xff0c;不小心改了非预期的数据&#xff0c;因为还没学到事务&#xff0c;所以恢复数据还比较麻烦&#xff0c;站在巨人的肩膀上还是解决了&#xff0c;原文连接在下面 https://blog.csdn.net/qq_42874315/article/details/140480570 解决办法 原…

Spring核心思想讲解之控制反转(IOC)

控制反转概述 控制反转实现方式 XML方式 方式一 方式二 方式三 注解方式 第一步 第二步 第三步 依赖注入&#xff08;DI&#xff09;实现方式 XML方式 手动注入 set注入 构造器注入 自动注入 set注入 构造方法注入 注解方式 方式一&#xff1a; 方式二&…

用excel内容批量建立文件夹

建文件夹是电脑操作过程中比较常见的&#xff0c;但是用EXCEL内容批量建文件夹&#xff0c;这似乎不相关的两个操作&#xff0c;那么怎么实现这样的一个功能&#xff0c;我们需要用到专门的软件进行关联&#xff0c;推荐&#xff1a;可易文件夹批量生成器&#xff0c;这个软件有…

RCE编码绕过--php://filter妙用

目录 代码 如何绕过 payload构造 代码 <?php $content <?php exit; ?>; $content . $_POST[txt]; file_put_contents($_POST[filename],$content); 当你想要输入代码的时候前面会有<?php exit;?>;&#xff0c;代码没有办法执行下去&#xff0c;所以…

Linux驱动学习之点灯(四,linux2.6)

上篇最后的第二种点灯方法年代比较久远&#xff0c;register_chrdev&#xff08;&#xff09;这个函数一下申请了255个设备号&#xff0c;不建议使用 如下图 下图的函数在linux2.6里是上图函数的升级版&#xff0c;不过他是静态分配&#xff0c;后续还得添加到cdev里 从上图函…

【自动驾驶】控制算法(三)轮胎侧偏与车辆动力学模型

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

回收站的文件删除了怎么恢复?4个技巧轻松找回文件!

在日常使用电脑的过程中&#xff0c;回收站作为我们删除文件的临时存放地&#xff0c;扮演着重要的角色。然而&#xff0c;有时我们可能会不小心从回收站中删除了重要文件&#xff0c;导致数据丢失。面对这种情况&#xff0c;许多用户会感到焦虑和无助。但别担心&#xff0c;本…

白酒与素食:健康与美味的双重享受

在美食的世界里&#xff0c;白酒与素食的搭配仿佛是一场跨界的盛宴。豪迈白酒&#xff08;HOMANLISM&#xff09;的醇香与精致素食的清新&#xff0c;在不经意间交织出了一幅美妙的画卷&#xff0c;让人在品味中感受到健康与美味的双重享受。 素食&#xff0c;以其清淡、自然的…

CORS error 302 Found

CORS error && 302 Found 场景 单点登录认证&#xff1a;访问A系统&#xff0c;在B系统登录认证 此处代码为A系统 controller ResponseBodyGetMapping("/idp/loginCheck")public void loginCheck(HttpServletRequest request, HttpServletResponse httpR…

使用 nginx 搭建代理服务器(正向代理 https 网站)指南

写在前面 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 文章目录 简介正向代理 简介ngx_http_proxy_connect_module 介绍 详细步骤包准备Linux 编译并安装 nginx修改 nginx 配置文件ngin…

【实现100个unity特效之24】使用ShaderGraph将图片转变为像素艺术

ShaderGraph连线图 效果 参考 https://www.youtube.com/watch?vBmhj7RgVDzc 完结 赠人玫瑰&#xff0c;手有余香&#xff01;如果文章内容对你有所帮助&#xff0c;请不要吝啬你的点赞评论和关注&#xff0c;你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章…

Postgres 超时 (Timeout) 详解

原文地址 https://www.bytebase.com/blog/postgres-timeout/ PostgreSQL 提供各种超时 (Timeout) 设置&#xff0c;通过控制某些进程的持续时间来帮助管理和优化数据库操作。这些超时对于确保系统的稳定性和性能至关重要&#xff0c;尤其是在高流量或复杂查询的环境中。让我们…

学习大数据DAY42 hive 分桶表

目录 分桶表 分桶表注意事项 hive 分桶表-创建分桶表 hive 排序关键字 hive 排序语句 上机练习 分桶表 分区提供一个隔离数据和优化查询的便利方式。不过&#xff0c;并非所有的数据集都可形 成合理的分区。对于一张表或者分区&#xff0c;Hive 可以进一步组织成桶&…

API容易被攻击,如何做好API安全

随着互联网技术的飞速发展和普及&#xff0c;网络安全问题日益严峻&#xff0c;API&#xff08;应用程序接口&#xff09;已成为网络攻击的常见载体之一。API作为不同系统之间数据传输的桥梁&#xff0c;其安全性直接影响到整个系统的稳定性和数据的安全性。 根据Imperva发布的…

【区块链+商贸零售】消费券 2.0 应用方案 | FISCO BCOS应用案例

方案基于FISCO BCOS区块链技术与中间件平台WeBASE&#xff0c;实现新一代消费券安全精准高效发放&#xff0c;实现消费激励&#xff0c; 促进消费循环。同时&#xff0c;方案将用户消费数据上链&#xff0c;实现账本记录与管理&#xff0c;同时加密机制保证了数据安全性。

【解决】Python | ModuleNotFoundError: No module named codecs

【解决】Python | ModuleNotFoundError: No module named codecs 在Python开发中&#xff0c;ModuleNotFoundError: No module named codecs 是一个相对罕见的错误&#xff0c;因为 codecs 是Python标准库中的一个模块&#xff0c;通常应该总是可用的。然而&#xff0c;当你遇到…

【kubernetes】k8s配置资源管理

一、ConfigMap资源配置 ConfigMap保存的是不需要加密配置的信息 ConfigMap 功能在 Kubernetes1.2 版本中引入&#xff0c;许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMap API 给我们提供了向容器中注入配置信息的机制&#xff0c;ConfigMap 可以被…