数据库是怎么做到事务回滚的呢?

在这里插入图片描述
数据库实现事务回滚的原理涉及到数据库管理系统(DBMS)如何维护事务的一致性和持久性。

基本原理:

  • ACID属性:事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)是数据库管理系统确保数据完整性和一致性的基本特性。在这些属性中,原子性和持久性是与事务回滚密切相关的。

  • 日志记录:数据库管理系统通过事务日志(Transaction Log)来记录所有事务的操作,包括事务开始、数据修改操作以及事务提交或回滚等信息。事务日志记录了事务的所有操作,在事务提交之前,将修改操作记录在日志中,以便在事务回滚时进行恢复。

  • Undo日志:当事务执行修改操作时,数据库会在事务日志中记录相应的Undo日志,用于在事务回滚时撤销事务所做的修改。Undo日志记录了事务对数据的修改操作,以及恢复这些修改所需的信息,包括修改前的数据值等。

  • 回滚操作:当事务发生错误或者用户显式地执行回滚操作时,数据库管理系统会根据事务日志中的Undo日志信息,逆向执行相应的撤销操作,将事务所做的修改全部撤销,恢复数据库到事务开始之前的状态。这样可以保证事务的原子性,即要么全部执行成功,要么全部回滚。

  • 持久化存储:数据库管理系统通常将事务日志和Undo日志等信息存储在持久化存储介质(如硬盘)上,以确保即使系统发生故障或者断电等情况,日志信息也不会丢失,可以通过回放日志来恢复数据并保证事务的持久性。

数据库的日志 undo log,redo log,bin log

Undo Log(回滚日志):
作用: 记录事务对数据库进行的修改操作的“逆操作”,即撤销操作,用于事务回滚或数据库系统崩溃恢复。
特点: 通常是在数据页上记录旧值,用于在事务回滚或系统崩溃恢复时,将数据恢复到事务开始之前的状态。
应用场景: 用于支持数据库的事务性操作,保证事务的原子性和一致性。

Redo Log(重做日志):
作用: 记录事务对数据库进行的修改操作的“正向操作”,即重做操作,用于在数据库系统崩溃后恢复数据到事务提交之后的状态。
特点: 通常是在日志文件中记录修改操作的“影子拷贝”,用于在系统崩溃后重新执行事务提交之前的修改操作,以确保事务的持久性。
应用场景: 用于数据库系统的崩溃恢复和恢复到最新的一致状态,以保证数据的持久性。

Binlog(二进制日志):
作用: 记录数据库中所有的修改操作,包括数据修改、DDL语句、数据导入导出等,用于数据备份、主从复制和数据恢复等。
特点: 通常是以二进制格式记录数据库的修改操作,可以通过日志解析工具将其解析为SQL语句或者进行数据恢复操作。
应用场景: 用于数据库的备份和恢复、主从复制、数据同步等场景,可以保证数据的一致性和可用性。

Undo Log记录了事务的“逆操作”,Redo Log记录了事务的“正向操作”,而Binlog记录了数据库的所有修改操作,它们分别用于支持事务的原子性和一致性、数据库系统的崩溃恢复以及数据库的备份和恢复等功能。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】从零开始认识进程 — 中下篇

送给大家一句话: 人一切的痛苦,本质上都是对自己无能的愤怒。而自律,恰恰是解决人生痛苦的根本途径。—— 王小波 从零认识进程 1 进程优先级1.1 什么是优先级1.2 为什么要有优先级1.3 Linux优先级的特点 && 查看方式1.4 其他概念 2…

c++的学习之路:5、类和对象(1)

一、面向对象和面向过程 在说这个定义时,我就拿c语言举例,在c语言写程序的时候,基本上就是缺什么函数,就去手搓一个函数,写的程序也只是调用函数的,而c就是基于面向对象的开发,他关注的不再是单…

picgo启动失败解决

文章目录 报错信息原因分析解决方案 报错信息 打开Picgo,显示报错 A JavaScript error occurred in the main process Uncaught Exception: Error:ENOENT:no such file or directory,open ‘C:\Users\koko\AppData\Roaming\picgo\data.json\picgo.log’ 原因分析…

[iOS]GCD(一)

[iOS]GCD(一) 文章目录 [iOS]GCD(一)GCD的概要GCD的APIDispatch Queuedispatch_queue_createMain Dispatch Queue和 Global Dispatch Queue.Main Dispatch_set_target_queuedispatch_afterDispatch Groupdispatch_barrier_asyncdispatch_applydispatch_applydispatch_suspend/d…

【功能实现】新年贺卡(蓝桥)

题目分析: 想要实现一个随机抽取功能 功能拆解:题目给了数组,我们采用生成随机数的方式,随机数作为数组的索引值访问数组的值。 并返回获取到的值,将获取到的值插入到页面中。 document.addEventListener(DOMConten…

哪款软件适合做书单的背景图片?安利这3款

哪款软件适合做书单的背景图片?在数字化时代,书单作为推广阅读文化、分享书籍信息的重要载体,其视觉效果与内容的吸引力同等重要。一个精美的书单背景图片,不仅能够吸引读者的眼球,还能增强书单的传播效果。因此&#…

Redis 教程系列之Redis 集群配置(十三)

1.Redis集群方案比较 主从模式 在软件的架构中,主从模式(Master-Slave)是使用较多的一种架构。主(Master)和从(Slave)分别部署在不同的服务器上,当主节点服务器写入数据时,同时也会将数据同步至从节点服务器,通常情况下,主节点负责写入数据,而从节点负责读取数据。…

Java I/O

什么是 IO流? 存储和读取数据的解决方案 I: input O: output 流:像水流一样传输数据 IO流的作用? 用于读写数据(本地文件,网络) IO流从 传输方式 分类 字符是给人看的,字节是给计算机看的。 …

八、C#计数排序算法

简介 计数排序是一种非比较性的排序算法,适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数,然后根据元素的大小依次输出排序结果。 实现原理 首先找出待排序数组中的最大值max和最小值min。 创建一个长度为max-min1的数组count…

Java:反射 reflection ( 概念+相关类+使用方法)

文章目录 一、反射(reflection)1.概念优点:缺点 2.反射的相关类1.Class类1.**反射机制的起源**2.获得类相关的方法3.获得类中属性的相关方法4.获得类中注解相关的方法5.获得类中构造器相关的方法6.获得类中方法相关的方法 2.获取Class对象的三种方法:1.使…

【算法刷题】链表笔试题解析(1)

一、链表分割 题目描述: 链接:链表分割 题目分析: 这题直接处理并不好做,我们可以构建前后两个链表,将小于x值的结点放在链表a内,将其它结点放在链表b内,这样将原链表遍历完后,原链…

JAVA------基础篇

java基础 1.JDK JDK :java development kit JRE:java runtime environment JDK包含JRE java跨平台:因为java程序运行依赖虚拟机,虚拟机需要有对应操作系统的版本,而jre中有虚拟机。 当你想要在Linux系统下运行,则需要…

(数据类型)前端八股文修炼Day1

1.JavaScript有哪些数据类型,它们的区别 JavaScript中有以下种数据类型: 基本数据类型(Primitive Data Types): String:表示文本数据,用单引号()或双引号(…

【C语言】strcmp 的使⽤和模拟实现

前言 这篇文章将要带我们去实现模拟一个strcmp函数 首先我们要知道strcmp函数的定义 strcmp()定义和用法 我们先看一下strcmp在cplusplus网站中的定义 链接: link int strcmp ( const char * str1, const char * str2 );比较两个字符串将 C 字符串 str1 与 C 字符串 str2 …

4.Python数据分析—数据分析入门知识图谱索引(知识体系下篇)

4.Python数据分析—数据分析入门知识图谱&索引-知识体系下篇 一个人简介二机器学习基础2.1 监督学习与无监督学习2.1.1 监督学习:2.1.2 无监督学习: 2.2 特征工程2.3 常用机器学习算法概述2.3.1 监督学习算法:2.3.2 无监督学习算法&#…

数据结构/C++:位图 布隆过滤器

数据结构/C:位图 & 布隆过滤器 位图实现应用 布隆过滤器实现应用 哈希表通过映射关系,实现了O(1)的复杂度来查找数据。相比于其它数据结构,哈希在实践中是一个非常重要的思想,本博客将介绍哈希思想的两大应用,位图…

jmeter常用的函数

20211025白板 课前内容: 参数: 用户定义变量:它是一个全局变量,在启动运行时,获取一次值,在运行过程中,不会动态获取值。 用户定义变量,在启动时获取一次值,在运行过程中…

【Flutter 面试题】 什么是Flutter插件(Plugin)?如何使用和创建插件?

【Flutter 面试题】 什么是Flutter插件(Plugin)?如何使用和创建插件? 文章目录 写在前面口述回答补充说明使用插件创建插件 写在前面 🙋 关于我 ,小雨青年 👉 CSDN博客专家,GitChat…

今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 3月28日,星期四

每天一分钟,知晓天下事! 2024年3月28日 星期四 农历二月十九 1、 四部门:培育空中摆渡、私人包机等新业态,2030年形成万亿级市场规模。 2、 市监总局发文规范外卖营销防止浪费:不将主食纳入满减优惠展示范围。 3、 多…

Fortinet 核心高管团队访谈:计划在所有产品系列中引入生成式AI

近期,Fortinet 发布了2023 财年第四季度及全年财报,再创骄人业绩!新增客户超 2.5 万,账单收入超 60 亿美元……对此,Fortinet 创始人、董事长兼首席执行官谢青(Ken Xie);首席财务官K…