ACID模型

news2024/11/28 11:51:23

ACID 是数据库管理系统(DBMS)中用来确保事务处理正确性和可靠性的四个特性的首字母缩写。ACID 是指原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

  • 原子性(Atomicity):原子性要求一个事务被视为一个不可分割的最小操作单元,要么全部执行成功,要么全部回滚到事务开始前的状态。即使在发生错误或异常的情况下,也不能只执行部分操作。原子性保证了事务的完整性,如果任何操作失败,所有已经执行的操作都将被撤销,数据库状态会回滚到事务开始前的一致状态。
  • 一致性(Consistency):一致性指的是在事务开始和结束时,数据库必须保持一致状态。这意味着事务必须遵循预定义的规则和约束条件,不会破坏数据库的完整性。一致性确保了数据的有效性和正确性。
  • 隔离性(Isolation):隔离性规定了同时执行的多个事务之间应该是相互隔离的,每个事务应该感觉不到其他事务的存在。隔离性主要关注并发事务之间可能产生的问题,如脏读(Dirty Read)、不可重复读(Non-repeatable Read)、幻读(Phantom Read)等。通过隔离级别的设置,可以控制事务之间的隔离程度,确保事务并发执行时的数据一致性。
  • 持久性(Durability):持久性要求一旦事务提交成功,对数据库的修改就是永久性的,即使在系统故障或崩溃的情况下也不会丢失。为了实现持久性,DBMS 将事务的日志记录到非易失性的存储介质(如磁盘)上,确保在系统恢复后可以将数据还原到提交事务的状态。

ACID 事务的特性保证了数据库中的事务处理是可靠和可靠的。通过将一系列操作组装成一个事务,并遵循 ACID 特性,可以确保数据库在并发环境下能够正确处理数据,并保持数据的一致性和完整性。

隔离性

说到隔离性首先是四种隔离级别

  • READ UNCOMMITTED(未提交读RU):一个事务还没提交时,它做的变更就能被别的事务看到
  • READ COMMITTED(已提交读RC):一个事务提交之后,它做的变更才会被其他事务看到
  • REPEATABLE READ(可重复读RR):一个事务中,对同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。 InnoDB默认级别 。
  • SERIALIZABLE(串行化):事务串行化执行,每次读都需要获得表级共享锁,读写相互都会阻塞,隔离级别最高,牺牲系统并发性。

这四大等级从上到下,隔离的效果是逐渐增强,但是性能却是越来越差。

不同的隔离级别是为了解决不同的问题

那么不同的隔离级别,隔离性是如何实现的,为什么不同事物间能够互不干扰? 答案是 锁 和 MVCC。

隔离级别的设置

查看当前的隔离级别

select @@transaction_isolation;

临时设置隔离级别

SET TRANSACTION ISOLATION LEVEL <隔离级别>;

永久设置隔离级别

transaction_isolation = <隔离级别>

事务的管理

开启事务

begin/start transaction

提交事务

commit

回滚事务

rollback

原子性

接着说说原子性。前文有提到 undo log ,回滚日志。隔离性的MVCC其实就是依靠它来实现的,原子性也是。 实现原子性的关键,是当事务回滚时能够撤销所有已经成功执行的sql语句。 当事务对数据库进行修改时,InnoDB会生成对应的 undo log;如果事务执行失败或调用了 rollback,导致事务需要回滚,便可以利用 undo log 中的信息将数据回滚到修改之前的样子。 undo log 属于逻辑日志,它记录的是sql执行相关的信息。当发生回滚时,InnoDB 会根据 undo log 的内容做与之前相反的工作:

  • 对于每个 insert,回滚时会执行 delete;
  • 对于每个 delete,回滚时会执行insert;
  • 对于每个 update,回滚时会执行一个相反的 update,把数据改回去。

以update操作为例:当事务执行update时,其生成的undo log中会包含被修改行的主键(以便知道修改了哪些行)、修改了哪些列、这些列在修改前后的值等信息,回滚时便可以使用这些信息将数据还原到update之前的状态。

一致性

一致性是事务追求的最终目标,前文所诉的原子性、持久性和隔离性,其实都是为了保证数据库状态的一致性。 当然,上文都是数据库层面的保障,一致性的实现也需要应用层面进行保障。 也就是你的业务,比如购买操作只扣除用户的余额,不减库存,肯定无法保证状态的一致。

持久性

Innnodb有很多 log,持久性靠的是 redo log。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

亚马逊美国站书包,书皮,便当盒,铅笔盒CPC认证

在人们生活中学习用品的种类十分丰富&#xff0c;并且随着社会经济以及现代电子科技的飞速发展&#xff0c;传统的学习用品已经不能满足人们对学习用品的需求&#xff0c;电子学习用品异军突起&#xff0c;受到了越来越多年轻人的青睐。我国庞大的学习用品消费群体每年用于购买…

字体文件名称成中的Bold, Light,Italic,Regular, Medium是什么意思?

解释 字体文件名&#xff1a; IntelOneMono-Bold.ttf其中IntelOneMono字体名称 Bold 字体的样式 .ttf字体后缀 样式英文 中文Bold粗体BoldItalic粗体斜体Italic斜体Light细体LightItalic斜细体Medium中等MediumItalic中等斜体Regular标准以下来自鸿蒙字体以下来自鸿蒙字体TC…

CSS标点符号换行问题

最近遇到一个奇怪的现象,元素中中文文本正常显示,但是加了一堆符号后中文文本居然换行了. div{width: 200px;border: 1px solid blue;word-break: break-all;} <div>文本</div>经过研究发现&#xff0c;因为标点符号不允许出现在行首和行尾&#xff0c;连带着符号…

【Linux】第八站:gcc和g++的使用

文章目录 一、解决sudo命令的问题二、Linux编译器-gcc/g1.gcc的使用2.g的使用 三、gcc编译链接过程1.预处理2.编译&#xff08;生成汇编&#xff09;3.汇编&#xff08;生成机器可识别代码&#xff09;4.链接&#xff08;生成可执行文件或库文件&#xff09;5.一些选项的意义 四…

Serverless与AI驱动,阿里云数据库核心能力全面升级!

11月1日&#xff0c;2023杭州云栖大会上&#xff0c;阿里云瑶池数据库宣布已全面实现Serverless化&#xff0c;并接入通义等大模型能力&#xff0c;大幅提升数据库一站式及智能化水平。同时&#xff0c;PolarDB Always On系列推出3大重磅升级&#xff0c;首个数据智能助手DMS C…

阿里云2核2G3M云服务器99元/年,新老同享,续费不涨价!

2023年阿里云双11活动正在火热进行中&#xff0c;推出了一款面向个人开发者、学生、小微企业的年度爆款套餐&#xff0c;2核2G3M云服务器99元/年&#xff0c;新老同享&#xff0c;续费不涨价&#xff01; 一、活动入口 活动地址&#xff1a;传送门>>> 二、活动详情 …

【标准化封装 钽电容封装】Tantalum Capacitors 各种壳

〇、引言 钽电容你见到的是什么封装&#xff1f;7343&#xff1f;那是D壳还是E壳&#xff1f; 有没有PCB焊接调试好&#xff0c;结构缺盖不住盖子了&#xff1f;&#xff1f;&#xff1f; 一、正文 上图片 这个叫黑钽 这个叫黄钽 这个叫啥我也不知道 二、封装 典型厂家壳…

stm32 定时器中断

目录 定时器分类 通用定时器框图 时钟源 内部时钟&#xff08;CK_INT&#xff09; 外部时钟模式 1&#xff08; TI1、 TI2&#xff09; 时钟信号输入引脚 滤波器 如果来自外部的时钟信号的频率过高或者混杂有高频干扰信号的话&#xff0c;我们就需要使用滤波器对信号重新…

入栏需看——管理类联考——英语——知识+记忆篇——导航页

文章目录 Section I Use of English——完型填空Section II Reading ComprehensionPart A——阅读理解 A 节&#xff08;Part A&#xff09;&#xff08;四篇&#xff09;Part B——阅读理解 B 节&#xff08;Part B&#xff09;&#xff08;只有一篇&#xff09;Part C——翻译…

Linux shell编程学习笔记19:until循环语句

Linux shell编程中的until语句&#xff0c;在功能上与其它编程语言一致&#xff0c;但在结构与其它编程语言又不太一样。在大多数编程语言中&#xff0c;until语句的循环条件表达式一般位于循环体语句的后面&#xff0c;但是在Linux shell编程中&#xff0c;until语句的循环条件…

教您如何去除照片上的水印!

许多网友都在寻找方法去除照片上的水印&#xff0c;水印通常用于保护版权或标识来源&#xff0c;但有时候我们可能需要使用带有水印的照片&#xff0c;却又不希望水印影响观感&#xff0c;今天我将向大家介绍两种有效的方法&#xff0c;帮助解决“如何去除照片上的水印”这一难…

从内存管理的角度来看,Python语言的变量和参数传递情况解析

从内存管理的角度来看&#xff0c;Python语言的变量和参数传递情况解析 概述 从内存管理的角度来看&#xff0c;Python中的变量和参数传递有一些特点&#xff1a; ☆ 变量是对象的引用&#xff1a;在Python中&#xff0c;变量实际上是对象的引用&#xff0c;而不是对象本身。…

Mysql数据库 7.SQL语言 关联关系

关联关系介绍 Mysql是一个关系型数据库&#xff0c;不仅可以存储数据&#xff0c;还可以维护数据与数据之间的关系——通过在数据表中添加字段建立约束 数据与数据之间的关联关系&#xff1a; 1.一对一关联 2.一对多关联 3.多对一关联 4.多对多关联 一个表的外键对应另一…

2023年【道路运输企业主要负责人】考试技巧及道路运输企业主要负责人复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【道路运输企业主要负责人】考试技巧及道路运输企业主要负责人复审模拟考试&#xff0c;包含道路运输企业主要负责人考试技巧答案和解析及道路运输企业主要负责人复审模拟考试练习。安全生产模拟考试一点通结合…

leetcode:1446. 连续字符(python3解法)

难度&#xff1a;简单 给你一个字符串 s &#xff0c;字符串的「能量」定义为&#xff1a;只包含一种字符的最长非空子字符串的长度。 请你返回字符串 s 的 能量。 示例 1&#xff1a; 输入&#xff1a;s "leetcode" 输出&#xff1a;2 解释&#xff1a;子字符串 &q…

虹科资讯 | 10月智能制造行业动态回顾

文章来源&#xff1a;虹科工业控制 阅读原文&#xff1a;https://mp.weixin.qq.com/s/0jR_QgmR6tmrRoTFAo8mFw 10月&#xff0c;虹科与PLCopen合作开展IEC 61131-3培训&#xff0c;目前正在火热报名中&#xff1b;人工智能领域的迅猛发展引起了智能制造业的广泛关注&#xff…

Flink1.18新特性生产环境应用的重点解读!

大家好&#xff0c;我是你们的群主王知无呀。 Flink 1.18已经于近期发布了。在这个新版本中新增了很多新的功能和特性。在这些特性中&#xff0c;有一些是生产环境非常重要的能力&#xff0c;大家在使用过程中可以重点参考和了解其中的原理。 算子级别状态保留时间TTL设置 首先…

CSS3媒体查询与页面自适应

2017年9月&#xff0c;W3C发布媒体查询(Media Query Level 4)候选推荐标准规范&#xff0c;它扩展了已经发布的媒体查询的功能。该规范用于CSS的media规则&#xff0c;可以为文档设定特定条件的样式&#xff0c;也可以用于HTML、JavaScript等语言。 1、媒体查询基础 媒体查询…

苹果AirTag平替产品选择,国内外支持苹果Find My芯片功耗全面对比

2021年4月20,苹果在春季产品发布会上推出了全新的产品类型- AirTag,将哆啦A梦的追踪徽章带到了现实。这个小产品当年并没有像其它苹果新品那样一朝爆红。随着年轮缓缓而坚定地前行, AirTag也缓缓而坚定地前行,并被越来越多的人接受和喜欢。 深入思考AirTag背后的产品逻辑和实现…

双11价格博弈之下,电商大战走向何方?

第十五个双11&#xff0c;电商平台内卷越发激烈。 10月18日&#xff0c;短视频平台快手迫不及待地打响第一枪&#xff0c;随后拼多多、淘宝天猫、京东纷纷启动双11。 不过&#xff0c;和以往不同的是&#xff0c;今年双11是随着“高端商战”一起拉开帷幕的。从京东采销喊话头…