当前位置: 首页 > news >正文

Redo与Undo的区别:数据库事务的恢复与撤销机制

在数据库中,redo 和 undo 是两个非常重要的概念,它们主要用于事务管理和恢复机制,确保数据的一致性和完整性。

下面分别解释这两个概念:

Redo(重做)

定义:redo 操作记录了事务对数据库所做的所有修改。这些记录存储在重做日志(Redo Log)中。

作用

  1. 事务持久性:确保事务在提交后,即使数据库发生故障,也能够恢复到事务提交后的状态。
  2. 恢复机制:在数据库故障恢复时,重做日志中的记录可以被用来重新应用对数据库的修改,使数据库恢复到故障前的状态。

工作原理

  • 当事务对数据库进行修改时,数据库会将这些修改记录写入重做日志。
  • 事务提交后,这些重做日志记录会被写入磁盘,以确保事务的持久性。
  • 如果数据库发生故障,重启后可以通过重做日志重新应用这些记录,恢复数据库。

Undo(撤销)

定义:undo 操作记录了事务开始前数据库的状态。这些记录存储在撤销日志(Undo Log)中。

作用

  1. 事务回滚:如果事务需要回滚,撤销日志中的记录可以用来撤销事务对数据库所做的修改。
  2. 多版本并发控制(MVCC):在支持多版本并发控制的数据库中,撤销日志用于生成不同版本的数据,以便事务可以读取事务开始时的数据快照。

工作原理

  • 当事务开始时,数据库会记录事务开始前的数据状态到撤销日志。
  • 如果事务需要回滚,数据库会使用撤销日志中的记录来恢复数据到事务开始前的状态。
  • 在多版本并发控制中,撤销日志中的记录用于生成旧版本的数据,以便事务在读取数据时可以读取到事务开始时的数据快照,而不是当前最新的数据。

示例

假设有一个事务 T1,它修改了表 Orders 中的一条记录:

  1. Redo

    • 事务 T1 开始修改记录。
    • 数据库将这些修改记录写入重做日志。
    • 事务 T1 提交。
    • 重做日志中的记录被写入磁盘,确保事务的持久性。
  2. Undo

    • 事务 T1 开始时,数据库记录了 Orders 表中该记录的初始状态到撤销日志。
    • 如果事务 T1 需要回滚,数据库会使用撤销日志中的记录来恢复 Orders 表中的记录到事务开始前的状态。
    • 在多版本并发控制中,如果另一个事务 T2 开始时 T1 还未提交,T2 会读取撤销日志中的记录来获取 T1 开始时的数据快照。

总结

  • Redo:记录事务对数据库的修改,用于事务的持久性和数据库的恢复。
  • Undo:记录事务开始前的状态,用于事务的回滚和多版本并发控制。

通过 redo 和 undo 机制,数据库能够确保事务的ACID(原子性、一致性、隔离性、持久性)属性,从而维护数据的一致性和完整性。

http://www.lryc.cn/news/484053.html

相关文章:

  • 【话题讨论】AI赋能电商:创新应用与销售效率的双轮驱动
  • 重构开发之道,Blackbox.AI为技术注入智能新动力
  • 机器学习在医疗健康领域的应用
  • M芯片Mac构建Dockerfile - 注意事项
  • 系统架构设计师论文
  • 速盾:CDN 和高防有什么区别?
  • goframe开发一个企业网站 rabbitmq队例15
  • 设计模式-七个基本原则之一-迪米特法则 + 案例
  • 【数学二】线性代数-二次型
  • 320页PDF | 集团IT蓝图总体规划报告-德勤(限免下载)
  • HTB:Sea[WriteUP]
  • Java 网络编程(一)—— UDP数据报套接字编程
  • ECharts图表图例8
  • Redis中的线程模型
  • [产品管理-77]:技术人需要了解的常见概念:科学、技术、技能、产品、市场、商业模式、运营
  • 鼠标点击(一)与3D视口窗口的交互
  • 线程-2-线程概念与控制
  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • Diffusion Policy——斯坦福机器人UMI所用的扩散策略:从原理到其编码实现(含Diff-Control、ControlNet详解)
  • (动画版)排序算法 -希尔排序
  • delphi fmx android 自动更新(二)
  • 蓝队知识浅谈(中)
  • 解决vue3+ts打包项目时会生成map文件
  • webpack指南
  • 关于QUERY_ALL_PACKAGES权限导致Google下架apk
  • 优化时钟网络之时钟抖动
  • C++《继承》
  • 微澜:用 OceanBase 搭建基于知识图谱的实时资讯流的应用实践
  • 【LeetCode】【算法】538. 把二叉搜索树转换为累加树
  • YoloV8改进策略:注意力改进|EPSANet,卷积神经网络上的高效金字塔挤压注意力块|即插即用|代码+改进方法