ACID

首先来讨论事务的四大特性ACID

  • 原子性(Atomicity):事务作为一个整体来执行,要不都执行,要不都不执行

  • 一致性(Consistency):事务必须保证数据库从一个一致状态转移到另一个一致状态。不能破坏关系数据的完整性以及业务逻辑的一致性。

    完整性一般就是数据的域完整性、实体完整性以及参照完整性。域完整性始址我们在创建表的时候指定的数据类型,输入限制。实体完整性规定我们的记录必须唯一,也就是说一个记录中必须存在一个或者多个字段唯一标示这一条记录。参照完整性则一般对应于关系表之间的关系,保证主键和外键之间的参照关系。不能因为执行事务儿破坏数据的完整性。

    逻辑业务一致性举个例子。再银行转账操作中,a、b初始值1000,a像b转100,但是不能因为我们的事务操作使得b只收到了50。事务要保证业务操作中我们的业务一致性不能乱。

  • 隔离性(Isolation):多个事务并发的时候,一个事务执行的时候不会影响另一个事务。

  • 持久性(Durability):已被提交的事务必须保存再数据库中。

Undo(历史数据,提交前持久化,修改前写入,保证原子性)

undo日志到底做了什么

undo日志会记录事务执行过程中,每次修改的数据的原始值。

x =5,y  = 8
t1 begin://undo日志记录x=5x = x- 1;//undo日志记录y=8y = y-2;//事务执行临近结束,将undo日志写入到磁盘//将数据写入到磁盘
commit

我们都知道,事务是具有原子性的要不全做,要不全部做。可到底是什么机制协助了数据库

undo日志就可以保证数据库事务操作的原子性,从上面的流程我们可以得知每次进行事务修改之前,都会吧未修改之前的值存储到undo日志中,当然再提交的时候也是先将undo写到磁盘,再把修改后的数据写到磁盘。倘若再undo写入磁盘之前发生了异常,根本就不需要做任何操作,这时候事务是被认为执行失败的,也不需要回滚,因为undo日志没有写入磁盘,数据库被认为处于没有执行事务的状态。若再数据写入磁盘的时候发生故障,则可以根据undo日志进行回滚。

整个过程下来起码实现了原子性以及持久性

undo操作的特点总结如下:

  1. 在更新数据前把数据记录到undo操作
  2. 持久性,只要数据提交则必定保存到了数据库
  3. undo log必须先于数据持久化到磁盘,这样的话若数据写入磁盘或者进行commit是出错,可以根据undo日志进行回滚
  4. 若事务再undo持久化之前出错,则数据库中的数据还保持在事务之前的状态。undo日志中也没有相应的记录,不需要回滚

当然undo的缺陷也很明显,他需要提交一次undo日志到磁盘,和一次数据到磁盘。io次数过多,性能太低。

Redo(新数据,提交前持久化,修改后写入,保证持久性)

redo的出现

为了解决undo性能过低的问题,就引入了redo

redo与undo正相反,他记录的是新数据的备份。并且事务在提交的时候只需将redo日志持久化到磁盘即可,数据可以根据redo日志异步的持久到磁盘。当发生异常的时候,只要redo

MySQL系列: undo和redo工作原理相关推荐

  1. Mysql的undo、redo、bin log分析

    目录 关于undo log 关于redolog 关于binlog 一个事务的提交流程 undo log :记录数据被修改之前的样子 redo log:记录数据被修改之后的样子 bin log:记录整个 ...

  2. ocsng mysql connection problem_OCSNG 介绍及其工作原理

    OCSNG部署:http://wowking.blog.51cto.com/1638252/994441 OCSNG 是什么呢? OCSNG就是Open Computer and Software I ...

  3. 【TensorFlow系列一】TensorFlow工作原理

    ↑ 点击上方[计算机视觉联盟]关注我们 今天开始,小编会更新TensorFlow系列文章,包括TensorFlow的使用和TensorFlow实践的项目等. 本篇主要介绍TensorFlow的计算模型 ...

  4. spark任务shell运行_大数据系列:Spark的工作原理及架构

    介绍 本Apache Spark教程将说明Apache Spark的运行时架构以及主要的Spark术语,例如Apache SparkContext,Spark shell,Apache Spark应用 ...

  5. Nginx系列(四)--工作原理

    上篇文章介绍了Nginx框架的设计之管理进程以及多个工作进程的设计,master进程用来管理通过fork子进程与子进程通信,子进程通过处理进程信号接到master的通信去处理请求. Nginx工作原理 ...

  6. cd40系列芯片_cd40110的工作原理详细(cd40110引脚图功能_如何计数及应用电路分享) - 全文...

    CD40110为十进制可逆计数器/锁存器/译码器/驱动器,具有加减计数,计数器状态锁存,七段显示译码输出等功能. CD40110引脚图 CD40110逻辑图及其功能 逻辑图 CD40110能完成十进制 ...

  7. MySQL系列-undo

    之前讨论过redo的作用,那么与之对应的便是undo了,undo记录了事务的行为,实现了MySQL的回滚和MVCC.当update.delete或者insert一条数据,都会对应的在undo中生成一个 ...

  8. mysql undo_mysql undo 和redo 被误删除的恢复操作(一致性)

    今天在群里看到有人说不熟悉innodb把ibdata(数据文件)和ib_logfile(事务日志)文件误删除了.不知道怎么解决.当时我也不知道怎么办.后来查阅相关资料.终找到解决方法.其实恢复也挺简单 ...

  9. mysql中innodb的工作原理_解读MySQL的InnoDB引擎日志工作原理

    当你使用UPDATE, INSERT, DELETE语句更新数据的时候,你就改变了两个地方的数据:log buffer和data buffers.Buffers是固定长度的内存块,通常是512字节. ...

最新文章

  1. Solr的安装步骤及增删改查代码示例
  2. python之路day4_python之路day4
  3. 诗与远方:无题(十四)
  4. IBM走鹃险胜Cray Jaguar 连任世界最快超级计算机
  5. Linux 末路,Kubernetes 崛起!
  6. python关键词共现_python 共现矩阵的实现
  7. Mac和windows哪个好
  8. 并发控制技术手段之时间戳(二)
  9. 恭喜流氓360vb100再次爆零
  10. 如何测试光纤系统中的插入损耗
  11. 逆变器LCL滤波器参数设计(一)
  12. MySQL主从复制以及会出现的幺蛾子问题、解决方法
  13. 【高级篇 / System】(7.0) ❀ 04. 高可用性 HA 配置 ❀ FortiGate 防火墙
  14. 让QQ的文字漂亮起来
  15. 网易有数海量任务调度和智能运维实践(整理)
  16. QlExpress 性能优化(二)
  17. [附源码]java毕业设计哈金院食堂美食评价系统
  18. 音频单元组件服务参考(Audio Unit Component Services Reference)
  19. 【5G核心网】5G概念以及名词缩写解释
  20. wifi 信号差 android,手机WiFi信号弱怎么办 手机WiFi信号突然变弱的解决方法

热门文章

  1. 启动Eclipse 弹出“Failed to load the JNI shared library”错误的解决方法
  2. 使用ros发布UVC相机和串口IMU数据
  3. Linux Kconfig及Makefile学习
  4. HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体
  5. superviseddescent (SDM C++11实现)环境配置
  6. C++11系列学习之四----auto
  7. 使用getline读入
  8. 两个二进制数异或的结果
  9. qtp启动java程序_转: QTP六脉神剑之调用Java程序
  10. 如何使用python效率_Python的5中提高效率的用法