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

【必会面试题】事务的四大特性?ACID

目录

事务的四大特性,即ACID特性,是数据库管理的基石。

  1. 原子性(Atomicity)
    • 定义:事务作为一个整体被执行,其内部的操作要么全部完成,要么全部不完成。如果事务中的任何一部分失败,那么整个事务就会失败,之前所做的所有更改都会被回滚,以保持数据库的一致性。
    • 实现:通过回滚日志(Undo Log)来实现。在事务执行过程中,每当对数据库进行修改操,数据库引擎改会在回滚日志中记录下这次修改的反向操作(即Undo信息)。例如,如果一个UPDATE操作将某字段从A改为了B,回滚日志会记录将该字段从B改回A的指令。
      • 提交:如果事务成功执行完毕并提交,事务管理器会检查是否所有预写日志已写入磁盘,然后清理相关的回滚日志或者等待垃圾回收机制清理。
      • 回滚:如果事务遇到错误需要回滚,或者调用了ROLLBACK语句,事务管理器会依据回滚日志执行反向操作,撤销所有已做的修改,直至事务回到初始状态。这一步确保了事务的原子性。

在这里插入图片描述

  1. 一致性(Consistency)

    • 定义:事务执行前后,数据库应保持合法的状态,即满足所有的业务规则。即使在多个事务并发执行的情况下,每个事务也必须从一个一致性的状态转换到另一个一致性的状态。
    • 实现:通过其他三个事务的特性及一些约束规则实现。理解起来有些抽象,简单来说就是不能有幻读、脏读、不可重复读等问题。
      • 例如,A仓库+B仓库共有100件货物,A仓库向B仓库发10件货物,他们的总数应该时不变的,这就要求数据库对还在路上的10件货物做处理,保证不能出现A仓库少10件,B仓库没有收到货物的情况。
  2. 隔离性(Isolation)

    • 定义:多个事务并发执行时,彼此的行为应该是独立的,一个事务不应该看到其他事务未提交的数据变更,以避免脏读、不可重复读和幻读等问题。
    • 实现:通过各种隔离级别来控制。数据库系统提供了多种隔离级别,如读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable),每种级别通过不同的锁定机制和并发控制算法实现不同程度的隔离效果。例如,使用MVCC(多版本并发控制)来实现可重复读的隔离级别。
      • 具体请看:经典面试题:什么是事务的隔离级别?什么是MVCC?
  3. 持久性(Durability)

    • 定义:一旦事务提交,它对数据库的修改就是永久的,即使发生系统崩溃或电源故障,这些更改也不会丢失。
    • 实现:通过重做日志(Redo Log)来实现。事务提交时,相关改动首先被记录到重做日志中,然后才被实际应用到数据库中。在系统恢复时,可以根据重做日志将未持久化的数据重新写入数据库,从而确保事务的持久性。此外,还会定期将内存中的数据刷写到磁盘上,确保数据的安全性。

在这里插入图片描述

相关文章:

【必会面试题】事务的四大特性?ACID

目录 事务的四大特性,即ACID特性,是数据库管理的基石。 原子性(Atomicity) 定义:事务作为一个整体被执行,其内部的操作要么全部完成,要么全部不完成。如果事务中的任何一部分失败,那…...

【QT】记录一次QT程序发布exe过程

记录一次QT程序发布exe过程 使用windeploy与enigma发布独立的QT程序第一步 QT编译输出 **release** 版本第二步 QT 自带 windepoyqt 补全链接库第三步 enigma virtual box压缩打包为单一exe最后【2024-06-07 17】- 【补充】 贴一个自己用的bat脚本【**QtDeploy2exe.bat**】半自…...

数据分类分级,误把起点当终点

数据分类分级 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 01 — 数据分类分级的定义 数据分…...

stm32 启动文件分析

启动文件前面的介绍 启动文件是后缀为.s的汇编语言文本文件,每行前面的分号表示此行是注释行。 启动文件主要完成如下工作,即程序执行过程: - 设置堆栈指针SP __initial_sp。 - 设置PC指针 Reset_Handler。 - 设置中断向…...

playwright--简单使用

playwright的基本使用主要围绕着启动浏览器、导航至网页、操作页面元素、执行脚本和收集数据这几个核心步骤。以下是简单的使用流程,以同步API为例: 目录 1. 导入库并启动playwright 2. 创建新页面并导航 3. 操作页面元素 4. 异步操作与等待 5. 数…...

pom学习笔记:kimi的自动化操作

1.先看结构: 声明:我是初学,可能有不合理的地方。 2.Base层。 我是把原来一个kimi的自动问答的代码改过来。 分析:其实我是新手,因为我用的浏览器是固定的,也没有打算和别人用。所以浏览器层面年的全部写…...

【iOS】UI学习——界面切换

界面切换 push和poppresent和dismiss示例程序 push和pop 在 Objective-C 中,pop 和 push 通常是与 UINavigationController 一起使用的方法,用于控制导航栈中视图控制器的跳转和回退。 push 和 pop 通常成对使用,用于实现导航栈的前进和后退功能。当用户进入新的视图控制器时…...

【悬架笔记三】1/4被动悬架垂向动力学仿真+频域特性分析

1/4被动悬架 代码: %书第156页、159页 clc clear close all %% 一.悬架参数 ms320; mw50; Ks22000; Cs1500; Kw195000; f00.07; %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 二.垂向振动动力学仿真 %% 二.1.状态方程 A [0 1 0 -1;.…...

【C++】——继承(详解)

一 继承的定义和概念 1.1 继承的定义 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保 持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类,被继承的称为基类…...

openGauss学习笔记-299 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQLdiag慢SQL发现

文章目录 openGauss学习笔记-299 openGauss AI特性-AI4DB数据库自治运维-DBMind的AI子功能-SQLdiag慢SQL发现299.1 概述299.2 使用指导299.2.1 前提条件299.2.2 SQL流水采集方法299.2.3 操作步骤299.2.4 使用方法示例299.3 获取帮助299.4 命令参考299.5 常见问题处理openGauss学…...

Git 分支管理规范化[Git Flow ]分支管理策略

分支命名规范 master 分支&#xff1a;master 分支只有一个&#xff0c;名称即为 master。GitHub 现在叫 main develop 分支&#xff1a;develop 分支只有一个&#xff0c;名称即为 developfeature 分支&#xff1a;feature/<功能名>&#xff0c;例如&#xff1a;featu…...

一键Mock工具(Http协议接口调试工具)

点击下载《一键Mock工具&#xff08;Http协议接口调试工具》 1. 前言 在进行Web开发时&#xff0c;前端小伙伴通常是和后端开发人员同步进行项目开发&#xff0c;经常会遇到后端开发人员接口还没开发完&#xff0c;也没有可以调试的环境&#xff0c;只能按照接口文档进行“脑…...

Golang的context

目录 context的基本使用 为什么需要context Context interface 标准 error emptyCtx cancelCtx Deadline 方法 Done 方法 Err 方法 Value 方法 context.WithCancel() newCancelCtx WithCancel中propagateCancel cancel timerCtx valueCtx context的基本使用…...

Android 各个版本名称和特性总结(持续更新)

我们就从Android 5.0开始吧&#xff0c;因为从写文时起&#xff0c;大部分手机都到5.0了。 目录 Android5.0 &#xff08;Lollipop 棒棒糖&#xff09;新特性 Android6.0新特性 Android7.0新特性 Android8.0(O)新特性 Android9.0新特性 Android10.0(Q)新特性 Android11…...

9.0 Android中的网络技术

Android中网络相关的技术&#xff0c;主要分别两种&#xff0c;一种为直接显示网页&#xff0c;另外一种为获取服务器中的数据进行设置。 权限声明 访问网络是需要声明权限 <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...

linux查看端口是否被占用 / 包含某个字符的文件/当前正在运行的进程/根据端口号查找进程

查看端口是否被占用 netstat -tuln | grep 80查看包含某个字符的文件 grep -rl "aaa" .r &#xff1a;递归搜索子目录。l &#xff1a;只显示包含匹配字符串的文件名。 ack "your_string"查看当前正在运行的进程 ps aux或者使用 top 命令用于实时显示当…...

解锁 JavaScript ES6:函数与对象的高级扩展功能

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;JavaScript 精粹 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; ES5、ES6介绍 文章目录 &#x1f4af;ES6函数扩展&#x1f353;1 默认参数&#x1f35…...

算法金 | 10 大必知的自动化机器学习库(Python)

本文来源公众号“算法金”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;10 大必知的自动化机器学习库&#xff08;Python&#xff09; 一、入门级自动化机器学习库 1.1 Auto-Sklearn 简介&#xff1a; Auto-Sklearn 是一个自动…...

微信小游戏开发难度大吗?开发流程有哪些?

微信小游戏的开发难度因项目的复杂度和规模而定&#xff0c;一般来说&#xff0c;休闲益智类的小游戏的开发周期相对较短&#xff0c;大约在10个工作日到1个月。如果涉及到复杂的算法、高级的交互或特殊的效果&#xff0c;开发时间可能会相应延长。 微信小游戏的开发流程包括需…...

Qt程序打包成单个exe文件

文章目录 0. 准备工作1. 使用 windeployqt 提取必要的动态链接库和资源文件1.1 操作步骤1.2 补充 2. 使用 Enigma Virtual Box将文件夹打包成单个exe2.1 操作步骤 0. 准备工作 Qt程序打包用到的工具有&#xff1a; windeployqt &#xff1a;安装Qt时自带Enigma Virtual Box 下…...

python-flask-djangol框架的减肥健身养生人士饮食营养管理系统

目录 技术选型与框架搭建核心功能模块设计数据模型设计示例&#xff08;Django ORM&#xff09;算法实现要点部署与扩展 项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作 技术选型与框架搭建 Python Flask/Django框架均适合开发…...

开源工具高效获取B站无损音质:3大核心流程掌握Hi-Res音频下载

开源工具高效获取B站无损音质&#xff1a;3大核心流程掌握Hi-Res音频下载 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mi…...

全民拼购的“低门槛+全权益”,到底戳中了商业的哪个命门

一、先给全民拼购画个像&#xff1a;不是“割韭菜”&#xff0c;是“普惠式信任游戏”老陈一开始也怕&#xff1a;“拼购不都是‘砍一刀免费拿’‘拉3人返现’吗&#xff1f;我可不想踩红线。”我跟他说&#xff1a;新型全民拼购和传统拼购的本质区别&#xff0c;是“从‘赚快钱…...

GuwenBERT:让AI读懂千年古文,开启古籍智能处理新时代

GuwenBERT&#xff1a;让AI读懂千年古文&#xff0c;开启古籍智能处理新时代 【免费下载链接】guwenbert GuwenBERT: 古文预训练语言模型&#xff08;古文BERT&#xff09; A Pre-trained Language Model for Classical Chinese (Literary Chinese) 项目地址: https://gitcod…...

MATLAB计时函数全解析:从tic/toc到cputime,新手到高手必知的效率工具箱

MATLAB计时函数全解析&#xff1a;从tic/toc到cputime&#xff0c;新手到高手必知的效率工具箱 在数据科学与工程领域&#xff0c;代码执行效率直接影响研究进度与项目成败。想象这样一个场景&#xff1a;你的仿真模型运行了8小时后突然崩溃&#xff0c;却无法定位性能瓶颈&am…...

单细胞分群避坑指南:为什么你的CD4+T细胞总被污染?(含清洗技巧)

单细胞分群避坑指南&#xff1a;为什么你的CD4T细胞总被污染&#xff1f;&#xff08;含清洗技巧&#xff09; 在单细胞测序数据分析中&#xff0c;CD4T细胞的分群常常让研究者头疼不已。明明按照标准流程操作&#xff0c;为什么我的CD4T细胞群总是混入其他细胞&#xff1f;这…...

Java突变测试终极指南:Pitest如何提升你的代码质量

Java突变测试终极指南&#xff1a;Pitest如何提升你的代码质量 【免费下载链接】pitest State of the art mutation testing system for the JVM 项目地址: https://gitcode.com/gh_mirrors/pi/pitest 突变测试是Java开发中革命性的质量保障技术&#xff0c;而Pitest&am…...

超级千问语音设计世界效果展示:听听这些用文字描述生成的惊艳语音

超级千问语音设计世界效果展示&#xff1a;听听这些用文字描述生成的惊艳语音 1. 当文字遇见声音&#xff1a;一场无需录音棚的创作革命 想象一下&#xff0c;你只需要在电脑前输入一段文字&#xff0c;再描述一种情绪——“一个在深夜电台里&#xff0c;带着沙哑嗓音和淡淡忧…...

SAP CO-PA获利能力分析:关键设置与事务码实战指南

1. SAP CO-PA模块入门&#xff1a;为什么你需要掌握获利能力分析 第一次接触SAP CO-PA模块时&#xff0c;我完全被那些专业术语搞晕了。直到参与了一个零售行业的项目&#xff0c;才真正理解这个模块的价值所在。想象一下&#xff0c;你是一家快消品公司的财务分析师&#xff0…...

告别80类限制!用YOLO-World+CLIP实现‘指哪打哪’的任意物体检测(保姆级教程)

突破类别限制&#xff1a;YOLO-World与CLIP联动的开放词汇检测实战 想象一下&#xff0c;当你需要检测一张照片中"左手边的马克杯"或"书架第三层的编程书籍"时&#xff0c;传统物体检测模型会告诉你&#xff1a;"抱歉&#xff0c;这不在我的80类识别范…...