数据库事务ACID原则学习分享

CST实战:变容二极管电容曲线提取全流程(附S参数设置技巧) 本文详细介绍了在CST Studio Suite中提取变容二极管电容-电压(C-V)曲线的完整实战流程。重点解析了S参数仿真的核心原理、DCFEED模块的正确配置、参数扫描的设置技巧,并探讨了集成SPICE模型进行精确仿真的方法,帮助射频工程师高效、准确地获取器件关键特性。 阅读详情

本人结合自己对技术的理解,努力以通俗易懂的内容帮助大家了解技术的基本原理,内容仅供参考,不对或不完善的地方请大家指教,感谢关注!

一、事务概念的引入

当今,信息化技术非常发达的时代,我们通过手机上的银行APP软件就可以完成转账业务,比如,张三可以在APP上将100元从自己的账户转给李四的账户,在这个转账过程中银行的信息系统发生了3阶段的工作。
在这里插入图片描述
如上图所示,张三在银行APP软件填写转账的相关信息并提交后,APP就会通过Internet网络向银行的交易服务系统提交“向李四银行账户转账100元的申请”,当银行交易服务系统接收到这条转账请求信息后,会先对这条申请信息进行解析并生成一套数据库系统能执行的两条指令并打包发给银行内部的数据库系统。

  • 第1条指令: “从张三银行账户减100元”
  • 第2条指令: “给李四银行账户加100元”

银行的数据库系统存储了银行所有账户的储蓄信息,当接到这两条指令后,就会在“账户信息表”中进行账户储蓄信息的变更操作,如下图所示:
在这里插入图片描述
如果大家已经看明白上面内容,那么接下来就开始抛出本文要讲的“数据库事务”的概念了,通俗讲,数据库事务就是数据库系统为完成某一个业务逻辑工作,进行的一系列的对数据库的操作,上文提到的张三向李四账户转100元就是一个业务逻辑工作,在这个业务逻辑中会对数据库执行两项操作,第1项操作就是在银行数据库中,从张三的账户储蓄扣除100元,第2项就是向李四账户储蓄增加100元。

但是有个可能问题,如果数据库系统在做完对张三的账户扣钱操作之后,数据库系统突然出现故障无法继续工作,那么就会出现“张三账户的钱扣掉,但李四账户没有加钱”的问题,整个银行储蓄账户的数据库就会凭空蒸发100元的信息,如果出现此类问题,那么银行系统就是完全不可信任的,谁也不想平白无故的少钱呀!

为了保障数据库系统不会出现以上的问题,数据库事务必须要从技术上满足“原子性”,顾名思忆,原子就是无可再分的最小单元,该原则就是约束数据库事务在执行的过程中从技术上做到“要么该事务中所有操作都执行完成,要么就全不执行,不能出现执行一部分操作的情况”,当事务满足了该原则后就不会出现上文提到的转账少100元的问题。

以上通过一个简单的示例为大家引入了一个数据库事务概念,并解释了“原子性”事务原则,为了保障数据库事务能够准确、一致的执行,就必须要遵守国际标准的ACID原则,下一章节就会给大家介绍这个原则。

#扩展性了解
在这里插入图片描述
*Jim Gray 詹姆士·格雷,数据库界三位图灵奖获得者之一,他为数据库最大贡献之一就是就是开创了数据库事务的多数重要理论,并在1983年,由 Andreas Reuter和Theo Härder 创造了数据库事务四大原则ACID来描述数据库事务的这些理论,如果想了解想了解更多的Jim Gray信息请网上搜索或拜读一下Jim Gray的重要著作《事务处理》一书。

数据库三位图灵奖获得者及主要贡献
Charles W. Bachman 查尔斯·巴赫曼 1973年获得图灵奖,数据库技术,1964年创造了最早的网状数据库IDS,数据库标准制定
Edgar Frank Codd 埃德加·弗兰克·科德 1981年获得图灵奖,关系数据库之父
Jim Gray 詹姆斯·尼古拉·格雷 1998年获得图灵奖 数据库事务

二、数据库事务的ACID原则

上一章节提到了,数据库事务要完整、一致的执行对数据库的操作,必须满足事务ACID 原则,即原子性(Atomicity) 、一致性(Consistency)、隔离性(Isolation)、持久化(Durability),这4项原则就是国际上公认的数据库事务标准,支撑事务应用的数据库系统必须要满足ACID原则。

1. 原子性(Atomicity)

在一个数据库事务中所有的操作要么全部都做完,要么全部都不做,不能出现部分完成的情况,上文提到的转账示例就是讲述事务原子性,完成一笔转账事务,数据库系统从张三账户储蓄减少100元,由1000元变成900元,李四的账户增加100元,由600元变成700元。
在这里插入图片描述
如果在这笔转账事务过程中出现操作失败的情况,导致张三账户的储蓄扣掉了100元,但李四的账户储蓄没有加100元,那么为了满足原子性原则,就必须回滚对张三账户扣钱的操作,即,还原他的账户储蓄到1000元,就当这个事务没有发生过。
在这里插入图片描述
2. 一致性(Consistency)

上文提到的张三给李四转账的事务示例,也体现了一致性原则,但侧重点不一样,一致性就是强调数据库经过事务操作后由一个状态转变到另一个状态,数据依然要保持一致,举例解释一下,转账事务执行前张三和李四的账户储蓄加起来是1600元,转账事务完成后张三和李四的账户加起来依然要为1600块,钱只是从一个账户转移到另一个账户,两个账户的钱加在一起的总额并没有因为此次转账发生变化,这就是一致性,为了解释的全面些,咱们再举另一个示例,见下文。

张三到一家电商平台,比如京东,要购买一款最新的小米手机,发现该手机明天有促销,促销时间从当天早上8点开始到晚上10点,促销期间售价由原来的2000元下调到1500元,优惠力度很大,但限定前1000名才可以享受优惠,这里规定的前1000名就是数据库系统的一致性约束。如果张三当天下单晚了,在他支付的那一刹那,正好有另外一个买家占到第1000名,按一致性约束的要求,他就不能再以优惠价格购买该手机,如果还能买就会破坏数据库事务一致性原则,因为在数据库中有一张表记录该促销1000名上限的约束规则,就是促销期间优惠价格销售的手机总数不能超过1000,因此,每次新增一个1500元购买,数据库系统都会统计一下数量并和约束规则核对,如果数量没有超过1000则可以执行1500元价格,超过了就不能执行此价格,如果数据库在技术上未能控制住该约束规则,就发生1500元订单超过1000个,不符合1000名的约束规则,那么,数据库就违背了一致性原则,因此,数据库通过技术手段来解决一致性问题。

3. 隔离性(Isolation)

在实际的业务应用中,通常会有多个事务同时对同一个数据库的同一条或多条数据进行同时操作,那么事务之间难免会互相影响导致出现数据错误,数据库事务隔离性技术正是处理和解决此类问题的一项重要技术,事务的隔离性相对其它事务原则要复杂,它主要包括4个隔离级别,分别是读未提交(Read uncommitted)、读提交(Read committed)、可重复读(Repeated read)以及序列化(Serializable),一般来讲一套数据库只能启动一种隔离级别,需要根据业务需要来进行取舍,接下来我们来逐个分析这4个隔离级别。

1)读未提交(Read uncommitted): 一个事务可以读取另一个未提交事务的中间数据

这里说的“提交”是指事务完成的标志,一个事务成功提交就说明这个事务成功完成,不然事务就会一直处在执行中的状态,涉及修改的数据也不是最终值,如果数据库事务隔离级别设定为读未提交,那么该事务中间状态的数据就可能会被其它事务读到,用到别的事务应用中并导致错误的发生,比如以下示例:

老婆的银行账户里存有300元,打算使用自己的账户在网上购买一套500元的化妆品,但账户的钱不够支付该订单,然后就打电话给老公,让他转200元到她的账户,老公答应马上就转并同时告诉她过一会试试能不能支付,接下来老公通过手机银行APP启动一笔转200元到老婆账户的转账事务,但老婆并不知道钱什么时候到账,干脆就直接在网上启动支付事务试试,正常来说,需要等老公把这笔转账事务完成以后,老婆才能开始支付事务,但如果数据库隔离级别设定为读未提交,那么就会出现问题,见下图:

在这里插入图片描述

从上图,我门可以清晰的看到,老公发起的转账事务是先启动的,事务中有一项操作是给老婆账户里加200元,因为数据库设定的隔离级别是读未提交,那么老婆发起的支付事务是可以读到老公转账事务过程中的数据,当转账事务把老婆账户里的钱刚增加到500块,恰好接下来被老婆的支付事务读到并完成了500元支付,但之后老公的转账事务因系统问题未能成功提交,那么就按照失败回滚处理,就当没有给老婆转过钱,但结果老婆确能把这笔钱给花了,老公的钱一分钱也没少,亏的最后是银行。

由以上给出的示例,老婆的支付事务读取的那500元钱,其实并不是真实的,因为,老公的转账事务并没有真实的把那200元钱转过来,所以支付事务读出来的数据是不真实的,这在数据库事务概念中有一个专业的术语,叫“脏读”,即一个事务读取了另一个事务的未提交的数据。

如果解决读未提交产生的脏读问题呢,那就需要将数据库事务的隔离级别提高到读提交的级别。

2)读提交(Read committed): 一个事务要等另一个事务提交后才能读取数据

一个事务正在修改一条或多条数据,那么其它事务是不可以读这些数据,必须要等第一个事务完成后才能读,这样就不会像读未提交一样,其它事务读取了脏数据。

但读提交也有它的局限性,因为读提交只解决了不让其它事务读本事务正修改的数据问题,但控制不了其它事务修改其要读的数据,在有些场景依然会出现问题,如下面这个例子:

老公打算通过其银行账户在一个网上购物商城买一部2000元的小米手机,他知道自己账户里有2100元,然后点击支付按钮开始走支付事务,这个网商平台是实时结算,商城的账户在另一家银行,那么商城的第三方支付系统首先会先查老公的账户里钱够不够,然后联系另一家银行的系统准备划账,但就在这个时候,她老婆用他的卡在另一家商城购物,大概花费500元,也发起了一个支付事务,但这个事务完成的速度很快,把钱直接扣掉500元,剩下1600元,但接下来老公的这笔支付事务准备开始扣除2000元钱的时候,再次查询发现钱不够了,然后就通知老公剩下的钱不足,不能完成支付,老公在支付页面上看到的情况就是,您账户储蓄满足支付,开始跨行支付中->对不起,您账户的钱不足无法完成支付,并且是等了很久才给出的账户钱不足提示。这个问题就是 不可重复读 问题,一个事务中前后两次读同一条数据,结果值是不一样的,要解决不可重复读问题,就要将隔离级别提升到可重复读级别。
在这里插入图片描述
3)可重复读(Repeatable read): 在一个事务开启时,其它事务不能修改其要读取的数据

当一个事务开始后,该事务所有涉及读的数据都不能被其它的事务修改,这样就能保证其事务执行过程中多次读取同样的数据不会发生变化,这种隔离级别在数据库事务中已经算比较高的级别,基本可以满足大多数事务应用的场景,但是可重复读虽然能够防止其它事务修改它的数据,但不能防止其它事务在它读取数据范围插入数据,举例:

老公通过使用银行的APP软件做一个统计,主要包括两项,第一项是找出化妆品总共消费额,另一项是化妆品单笔最高消费金额,老公启动了这次的统计事务,统计这两项都支出多少钱,事务开启以后,数据库系统先按化妆品的类别码进行扫描,将所有化妆品的订单记录都扫描出来,然后计算个汇总值,然后数据库系统进行第2次扫描,本次扫描是通过排序找出消费金额最高的单笔消费,但最后APP返回出来的结果就是,化妆品总共消费1000元,化妆品最高单笔消费1500元,这样老公很是纳闷,为什么总共消费1000元,其中的最高单笔消费确是1500元,不合理呀,其实问题就出在数据库系统统计事务第1项刚做完,正准备开始下一项统计的时候,老婆发起了另一笔支付事务完成了一笔1500元的化妆品消费,结果就在老公的统计事务的两项统计操作之间,出现了一笔新的订单。
在这里插入图片描述
由上边的示例可以了解到,可重复读不能解决数据库事务的幻读问题,幻读是什么呢?从字面上就能理解,就是在一个事务中重复读两次一个范围的数据,但发现第2次多读了数据出来,感觉就像是发生了幻觉,幻读同样也是数据库事务在多用户同时并发使用中出现的问题,但可重复读的事务隔离级别已经是很高的了,使用的也非常广泛,如果真的想杜绝所有的事务隔离问题,那只有最后一个隔离级别–序列化。

4)Serializable序列化:Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,一个事务完成以后开始下一个事务,不会出现前三个隔离级别出现的脏读、不可重复读以及幻读的问题,但这种隔离级别效率最为低下,一般数据库事务不会使用这种隔离级别。

4. 持久化(Durability):一个数据库事务一旦成功提交完成后,所有这个事务对数据库所有更改的内容全部被保留下来,在数据库系统正常运行的过程中,除非新的事务要去更改,否则内容不会改变,以及一些系统异常的情况下除非是存储磁盘损坏,不然数据也不会改变。

三、总结

数据库事务ACID原则是数据库系统执行事务保障数据库正确一致的基本原则,市面上所有事务型数据库技术产品都必须要满足该原则,本文的初衷就是让大家能够快速理解事务基本原则的概念,感谢大家阅读本文,希望能提出宝贵意见!

echarts 生成中国陕西省份(或其他省份)的地图,大屏使用 效果图: 一、首先第一步需要下载echarts和获取到陕西身份的地图信息。 1.下载echarts链接(官网): Apache ECharts 2.生成指定省份的地图数据信息,数据可以在阿里云获取。 DataV.GeoAtlas地理小工具系列 如图,点击左圈需要的省份,这里我选择的是陕西省,然后点击右圈复制下载链接,得到一个json格式的数据,可以在json转换网站转成js格式。 Json在线解析格式化-Json在线校验Json格式化压缩-Jsons在线工具 转成js格. 阅读详情

相关推荐

微信小程序反编译实战:用wxappUnpacker获取他人源码的完整流程(附常见报错解决方案)

本文详细解析了微信小程序反编译的完整流程,从缓存提取到源码重构,使用wxappUnpacker工具链实现逆向工程。涵盖环境配置、解密反编译、项目调试等关键步骤,并提供了常见报错解决方案,帮助开发者学习优秀实现方案或进行安全审计。

weixin_42706667的博客 469

事务的特性(ACID)是指什么?思维导图 代码示例(java 架构)

*原子性(Atomicity)**确保事务的所有部分作为一个整体执行。**一致性(Consistency)**维护数据库的状态始终符合预设的规则和约束。**隔离性(Isolation)**防止并发事务之间的相互干扰。**持久性(Durability)**保证事务一旦提交,其结果就永久保存。遵循ACID原则可以帮助你构建可靠且健壮的数据库应用。如果你有更具体的需求或者需要进一步的帮助,请告诉我!

qq_33240556的博客 493

通过TMS320F28335学习DSP的开发流程——28335的基础知识(1)

1、TMS320F28335内核的主要特点 ①F28335 DSP集成了DSP和微控制器的长处,如DSP的主要特征、单周期乘法运算,F28335能够在一个周期内完成32x32位的乘法累加运算,或者两个16x16位乘法累加运算,而同样32位的普通单片机则需要4个周期以上才能完成 ②快速的中断响应 ③可在任何内存位置进行单周期读、修改、写操作 ④可采用C/C++编程软件,效率非常高 2、处理器的主要资源 ①32位浮点DSP,主频是150MHz,方便电机控制、电力设备控制及工业控制等。 ②片上存储器:FLASH–

Kayboy的博客 2万+

什么是事务ACID原则?(建议收藏)

MySQL二十二:事务ACID原则 要么都成功,要么都失败 事务ACID原则: 原子性、一致性、独立性、持久性 A(Atomicity)原子性 ​ 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。 ​ 比如银行转账,从A账户转100元至B账户,分为两个步骤:(1)从A账户取100元;(2)存入100元至B账户 这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了

... 4072

MFC 修改CheckBox的文本颜色方法

设置主题 这一步是必须的,不可省略。 BOOL CMFCApplication1Dlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主题 HWND

Kim的博客 2249

告别视频广告:OpenWrt下luci-app-adbyby plus/lite的完整配置与避坑手册

本文详细介绍了在OpenWrt路由器上配置Adbyby Plus/Lite广告屏蔽工具的完整流程与优化方案。从环境准备、规则文件手动配置到高级性能调优,帮助用户有效拦截视频前贴片广告和弹窗广告,提升家庭网络浏览体验。特别针对官方源停止维护的问题,提供了实用的规则更新解决方案。

weixin_29306011的博客 742

MySQL事务、索引、数据库设计以及数据库三大规范

1、什么是事务? 要么都成功,要么都失败 —————————————— 1、SQL执行 A给B转账 A 1000 —>200 B 200 2、SQL执行 B收到A的钱 A 800 —>B 400 —————————————— 将一组SQL放在一个批次中去执行 事务(Transaction)原则:ACID原则(脏读,幻读…) 参考博客连接:事务ACID理解 原则性(Atomcity) 要么都成功,要么都失败 一致性(Consistency) 事务前后的数据完整性要保证一致 隔离性(I

m0_51067047的博客 541

手把手教你用DLP4500和海康相机搭建双目结构光系统(附完整代码获取路径)

本文详细介绍了如何利用DLP4500投影仪和海康工业相机搭建低成本双目结构光三维测量系统。从硬件选型、软件配置到结构光编码解码实现,再到三维重建全流程,提供了完整的实战指南和优化技巧,帮助用户以不到2万元的预算实现0.05mm精度的三维扫描。

weixin_32447969的博客 317

数据库事务详解

概述: 事务(Transaction)是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。 ACID 事务具有4个基本特征,分别是:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Duration),简称ACID。 隔离级别 ACID这4个特征中,最难理解的是隔离性。在标准SQL规范中,定义了4个事务隔离级别,不同的隔...

EmotionComputer 404

ICC 实战解析——CTS 时钟树综合中的关键设置与优化策略

本文深入解析ICC工具中CTS时钟树综合的关键设置与优化策略,涵盖时钟树异常引脚设置、目标参数配置、非默认布线规则(NDR)等核心技术。通过实战案例展示如何有效控制时钟偏差、优化信号完整性,并平衡功耗与面积,为芯片物理设计提供专业指导。

weixin_30872577的博客 326

解决Office 365 SMTP问题:C#邮件发送详解

本文介绍了如何在C#中使用Office 365 SMTP服务发送邮件。重点讲解了正确配置SMTP客户端的关键参数:必须使用587端口并启用TLS加密(EnableSsl=true),同时通过NetworkCredential进行身份验证。虽然SmtpClient已不推荐用于新项目,但本文提供的代码示例仍适用于临时项目或系统维护,并建议未来可考虑使用MailKit等现代邮件库。文章还包含了错误处理机制,确保程序健壮性。

2501_90323865的博客 141

数据库事务的四个原则

3. 隔离性(Isolation):每个事务的执行都应该与其他事务的执行相互隔离,使得每个事务感觉自己是唯一在运行的事务。隔离性保证了并发事务的正确性和一致性,避免了并发执行时可能出现的问题,如脏读、不可重复读和幻读等。4. 持久性(Durability):一旦事务提交成功,其所做的修改将永久保存在数据库中,并且对于后续的事务和系统故障是可见的。1. 原子性(Atomicity):事务是一个不可分割的最小工作单元,要么全部执行成功,要么全部回滚到事务开始前的状态,不存在部分执行的情况。

m0_62381101的博客 1282

Office系列完全干净卸载工具合集(最全)

使用 Microsoft Fix it 卸载 Microsoft Office 套件 一、Windows 7、Windows Vista或Windows XP下卸载Office 1.MicrosoftEasyFix50416 工具用来卸载office 2003 MicrosoftEasyFix50416_Office2003.msi 2.MicrosoftEasyFix50154 工具用来卸载office 2007 MicrosoftEasyFix50154_Office2007.msi 3.Microso

业精于勤,荒于嬉 3万+

数据库事务ACID原则学习分享:用TaoToken统一Key跑通原子性与一致性验证

用本地MySQL建订单库存表,通过提交与回滚对照用例验证数据库事务ACID原子性与一致性,并借助TaoToken统一Key生成边界测试数据,附校验SQL与401等报错排查,官网https://taotoken.net/?utm_source=taotoken_aicg_blog_end

weixin_35755562的博客 11

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

分布式系统中ACID和CAP有什么区别

CAP是分布式系统中进行平衡的理论,它是由 Eric Brewer发布在2000年。Consistent一致性: 同样数据在分布式系统中所有地方都是被复制成相同。Available可用性: 所有在分布式系统活跃的节点都能够处理操作且能响应查询。Partition Tolerant分区容错性: 在两个复制系统之间,如果发生了计划之外的网络连接问题,对于这种情况,有一套容错性设计来保证。

2301_76238237的博客 836

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

一文轻松搞定Java经典面试

CAP是分布式系统中进行平衡的理论,它是由 Eric Brewer发布在2000年。Consistent一致性: 同样数据在分布式系统中所有地方都是被复制成相同。Available可用性: 所有在分布式系统活跃的节点都能够处理操作且能响应查询。Partition Tolerant分区容错性: 在两个复制系统之间,如果发生了计划之外的网络连接问题,对于这种情况,有一套容错性设计来保证。

m0_61549984的博客 825

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

2024年阿里Java高级面试题及答案,java架构师面试宝典

CAP是分布式系统中进行平衡的理论,它是由 Eric Brewer发布在2000年。Consistent一致性: 同样数据在分布式系统中所有地方都是被复制成相同。Available可用性: 所有在分布式系统活跃的节点都能够处理操作且能响应查询。Partition Tolerant分区容错性: 在两个复制系统之间,如果发生了计划之外的网络连接问题,对于这种情况,有一套容错性设计来保证。

2401_84408814的博客 990

2024年阿里Java高级面试题及答案,javadubbo面试题

事务的定义和实现一直随着数据管理的发展在演进,当计算机越来越强大,它们就能够被用来管理越来越多数据,最终,多个用户可以在一台计算机上共享数据,这就导致了一个问题,当一个用户修改了数据而另外一个还在使用旧数据进行计算过程中,这里就需要一些机制来保证这种情况不会发生。ACID规则原来是在1970被Jim Gray定义,ACID事务解决了很多问题,但是仍然需要和性能做平衡协调,事务越强,性能可能越低,安全可靠性和高性能是一对矛盾。

2401_84408759的博客 696

美食分享平台|基于java + vue美食分享平台系统(源码+数据库+文档)

本文介绍基于SpringBoot+Vue的美食分享平台系统,涵盖系统功能演示、技术选型(后端SpringBoot、前端Vue、数据库MySQL)、界面设计原则及完整代码与测试用例。系统采用前后端分离架构,具备高可维护性与扩展性,适用于毕业设计与实战开发。源码已验证可运行,支持一键部署,附详细讲解与答疑服务,助力学生高效完成项目。

JIngJaneIL的博客 162

深入解析ACID原理:数据库事务的四大基石

在现代数据库系统中,ACID(原子性、一致性、隔离性、持久性)如同守护数据的四大骑士,确保即使在系统崩溃或并发访问的情况下,数据也能保持正确与可靠。本文将深入剖析主流数据库(MySQL/Oracle等)的实现机制,并通过原理图示和代码示例揭示ACID背后的黑科技。

weixin_37840904的博客 1075

浅谈 Mysql 事务 由 ACID 到 MVCC

在 Mysql 的并发控制中我们常常需要使用到 锁 和 MVCC,那么这两者的使用场景有什么区别呢,为什么有了锁还要引入 MVCC 呢?下面我将为大家娓娓道来这两者使用上的区别 Mysql 的锁由 共享锁(读锁) 和 排它锁(写锁) 组成 按粒度也可以分为表锁和行锁 加锁和解锁遵循 2PL 即 两阶段锁原则 2PL就是将加锁/解锁分为两个完全不相交的阶段。加锁阶段:只加锁,不放锁。解锁阶段:只放...

qq_36431213的博客 856

HoRain云--数据库ACID原则:数据安全与性能的终极平衡

【摘要】ACID原则是数据库事务的核心特性,包含原子性(通过UndoLog实现操作回滚)、一致性(依靠约束校验)、隔离性(通过锁机制和MVCC控制并发)及持久性(利用RedoLog确保故障恢复)。四者协同保障数据完整性:原子性避免部分更新,一致性维护业务规则,隔离性平衡并发与安全,持久性防止数据丢失。实际应用中需根据业务场景(如金融需强一致性,高并发读可弱隔离)在ACID与BASE间权衡,本质是以可靠性换取性能。技术实现包括两阶段提交、WAL日志等,理解这些机制对构建稳健系统至关重要。

2401_86544677的博客 831

Java中的事务(学习分享)

文章目录事务介绍什么是事务?为什么使用事务?事务有那些特性(ACID原则)事务并发处理可能出现的问题事务的类型JDBC事务 事务 介绍 什么是事务? 一般是指要做的或所做的事情。 在计算机中是指: 访问并可能更新数据库中各种数据项的程序执行单元(unit)。 事务通常是由数据库操纵语言或者编程语言(如SQL、Java、C++)书写的用户程序执行所引起的。 事务的组成: 事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作。 通常是以begin t

weixin_43839323的博客 291

事务复制提示初始快照不可用_谈谈数据库的事务ACID

在数据库中新建一个字段并且设置为索引列,还有删除整张表的数据,类似这些操作都是一系列操作的组合,执行后不能出现中间状态,也就是不会出现新建了字段却不是索引的情况,也不会出现只有一部分数据被删除的情况。这种保证是事务在发挥作用,虽然我们没有使用begin-transaction-commit来执行命令。既然事务是一系列操作的组合,那两个事务的多个操作如何正确顺序执行和如何高效执行就是关键了。这就要说...

weixin_39546520的博客 150

MongoDB多文档事务详解

事务(transaction)是传统数据库所具备的一项基本能力,其根本目的是为数据的可靠性与一致性提供保障。而在通常的实现中,事务包含了一个系列的数据库读写操作,这些操作要么全部完成,要么全部撤销。例如,在电子商城场景中,当顾客下单购买某件商品时,除了生成订单,还应该同时扣减商品的库存,这些操作应该被作为一个整体的执行单元进行处理,否则就会产生不一致的情况。原子性(atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行。一致性(consistency)

EverythingAtOnce的博客 2777

InnoDB事务深度解析:重温ACID特性与隔离级别的实战指南

例如,事务A第一次读取某条记录后,事务B修改并提交了该记录,事务A再次读取时,会看到不同的值,破坏了事务内的一致性。截至2025年,InnoDB在全球关系型数据库市场的份额已突破85%,支撑了包括阿里巴巴、京东等大型电商平台每秒百万级的高并发事务处理,例如京东2025年“618”大促期间,InnoDB成功处理了峰值超过120万次/秒的订单事务,确保了数据的一致性和系统稳定性。例如,假设事务A修改了一条记录但尚未提交,事务B读取了这条修改后的记录,如果事务A随后回滚,事务B读取的就是无效的"脏"数据。

zuiyuelong的博客 1668
下一篇: 分布式数据库CAP原理学习分享
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值