对数据库事务的理解

面试官:说一下你对数据库事务四大特性的理解 前言 说到数据库事务,很多人就会想事务的ACID即原子性,一致性,隔离性,持久性,以及事物的四个隔离级别,但是并不是很明白为什么要用这四个特性来保证事务,以及事务的隔离级别是怎么产生的?包括LZ之前看《高性能MySQL》关于事务的介绍也是一脸蒙蔽,因为太抽象了。偶然在慕课网上看到《在线分布式数据库原理与实践》这个视频,讲的挺不错的。特地总结一波,分享一下,相信读完本文你可以轻松理解这些概念 事务简介 我们在写Java程序,遇到并发问题时,会想到用锁来解决。数据库遇到并发问题怎么解决呢?答案就是事务,事务. 阅读详情

定义

  1. 用户一系列的数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
  2. 一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)
  3. 一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成
  4. 事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同

事务四大特征(ACID)

原子性(Atomicity):事务是最小单位,不可再分

事务必须是原子工作单元,事务中的操作要么全部执行,要么全都不执行,不能只完成部分操作。原子性在数据库系统中,由恢复机制来实现。

一致性(Consistency):事务要求所有的DML语句操作的时候,必须保证同时成功或者同时失败

事务开始之前,数据库处于一致性的状态;事务结束后,数据库必须仍处于一致性状态。数据库一致性的定义是由用户负责的。例如,在银行转账中,用户可以定义转账前后两个账户金额之和保持不变。

隔离性(Isolation):事务A和事务B之间具有隔离性

系统必须保证事务不受其他并发执行事务的影响,即当多个事务同时运行时,各事务之间相互隔离,不可互相干扰。事务查看数据时所处的状态,要么是另一个并发事务修改它之前的状态,要么是另一个并发事务修改它之后的状态,事务不会查看中间状态的数据。隔离性通过系统的并发控制机制实现。

隔离级别

读未提交:read uncommitted

  • 事物A和事物B,事物A未提交的数据,事物B可以读取到
  • 这里读取到的数据叫做“脏数据”
  • 这种隔离级别最低,这种级别一般是在理论上存在,数据库隔离级别一般都高于该级别

读已提交:read committed

  • 事物A和事物B,事物A提交的数据,事物B才能读取到
  • 这种隔离级别高于读未提交
  • 换句话说,对方事物提交之后的数据,我当前事物才能读取到
  • 这种级别可以避免“脏数据”
  • 这种隔离级别会导致“不可重复读取”
  • Oracle默认隔离级别

可重复读:repeatable read

  • 事务A和事务B,事务A提交之后的数据,事务B读取不到
  • 事务B是可重复读取数据
  • 这种隔离级别高于读已提交
  • 换句话说,对方提交之后的数据,我还是读取不到
  • 这种隔离级别可以避免“不可重复读取”,达到可重复读取
  • 比如1点和2点读到数据是同一个
  • MySQL默认级别
  • 虽然可以达到可重复读取,但是会导致“幻像读”

串行化:serializable

  • 事务A和事务B,事务A在操作数据库时,事务B只能排队等待
  • 这种隔离级别很少使用,吞吐量太低,用户体验差
  • 这种级别可以避免“幻像读”,每一次读取的都是数据库中真实存在数据,事务A与事务B串行,而不并发

持续性(Durability):是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

一个已完成的事务对数据所做的任何变动在系统中是永久有效的,即使该事务产生的修改不正确,错误也将一直保持。持久性通过恢复机制实现,发生故障时,可以通过日志等手段恢复数据库信息。

事务的 ACID原则保证了一个事务或者成功提交,或者失败回滚,二者必居其一。因此,它对事务的修改具有可恢复性。即当事务失败时,它对数据的修改都会恢复到该事务执行前的状态。

关于事务的术语

  1. 开启事务:Start Transaction
  2. 事务结束:End Transaction
  3. 提交事务:Commit Transaction
  4. 回滚事务:Rollback Transaction
深入理解OLE DB事务处理与错误处理 本文深入探讨了OLE DB在数据库编程中的事务处理和错误处理机制。通过具体的代码示例和详细解释,我们了解了如何提交和中止事务,以及如何在多用户环境下保持数据的一致性和隔离性。此外,文章还涵盖了索引对象的使用方法,以及如何通过OLE DB实现错误处理,包括检查方法调用结果和理解 HRESULT 错误代码。 阅读详情

相关推荐

芯片设计中的“隐形杀手”:手把手教你理解并优化互连寄生参数(以SPEF/DSPF为例)

本文深入探讨了芯片设计中互连寄生参数的影响及优化策略,特别关注SPEF/DSPF文件解析与静态时序分析。通过实际案例展示了耦合电容对时序收敛的关键影响,并提供从定位到优化的完整解决方案,助力工程师应对先进工艺下的设计挑战。

weixin_30687051的博客 597

MySQL中对于事务的理解

事务:一组逻辑单元,使数据从一种状态变换成另一种状态。所有事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久保存下来;要么数据库管理系统将放弃所做的所有修改,整个事务回滚(rollback)到最初状态。比如:用户AA给用户BB转账100,这就是一个事务,不可分割。也就是AA会减少100,然后BB会增加100,这个操作要么都执行(commit),要么就都不执行(rollback)。事务是数据库区别于文件

qq_41894176的博客 1389

Playwright Java环境配置避坑指南:浏览器路径、类加载与离线部署

Playwright作为现代端到端测试框架,其Java SDK突破了传统Selenium的Driver管理模式,将Chromium/Firefox/WebKit内核视为可编程运行时资源。其核心原理在于SDK与浏览器二进制分离——Maven仅管理Java字节码,而浏览器需独立下载、校验与沙箱加载。这一设计带来显著技术价值:跨平台一致性、进程隔离安全性及多浏览器并行能力;典型应用场景涵盖Spring Boot集成测试、金融级离线CI/CD、Kubernetes容器化部署及Air-Gapped封闭环境。然而,因J

weixin_32956805的博客 675

如何理解数据库事务?

本文主要介绍了MySQL事务,着重介绍了事务的隔离性以及隔离级别

qq_54469537的博客 1576

STM32G0实战:HAL库与LL库Flash操作避坑指南(附HardFault解决方案)

本文深入剖析了STM32G0系列微控制器在Flash操作中常见的HardFault问题,对比了HAL库与LL库在读写擦除操作上的底层差异与潜在陷阱。文章提供了基于寄存器状态分析的精准调试方法,并给出了经过实战检验的解决方案与健壮的代码框架,帮助开发者有效规避数据丢失与系统崩溃风险。

t8u9v0w1x的博客 730

lstm如何输入多维序列_深度学习也可以做时间序列异常诊断

最近在看的一篇论文里,用到了GRU、VAE等技术来做多维时间序列异常诊断。那么今天首先来聊一聊深度学习的基础知识,然后简单说一下论文。以下基础知识部分的内容,主要来源于李宏毅老师的课程。有兴趣的可以去看李老师的课程哦https://www.bilibili.com/video/BV1JE411g7XF?p=1 1、GRU(Gate Recurrent Unit):GRU是循环神经网络(Recurr...

weixin_30899789的博客 2833

一文读懂数据库事务

首先说一下什么是事务。事务(Transaction)指一个操作,由多个步骤组成,要么全部成功,要么全部失败。比如我们常用的转账功能,假设A账户向B账号转账,那么涉及两个操作:(1)从A账户扣钱;(2)往B账户加入等量的钱。因为是独立的两个操作,所以可能有一个成功,一个失败的情况。但是因为在这种场景下,必须要保证事务,即要么同时成功,要么同时失败(一个失败需要回滚),不能存在从 A 账户扣钱成功,往 B 账户加入等量钱失败这种情况。

Doublelv 的博客专栏。 3万+

生信小白必看:手把手教你用R语言实现counts/FPKM/TPM互转(附代码)

本文为生信初学者详细讲解如何使用R语言实现counts、FPKM和TPM三种转录组表达量单位的精准转换,包含完整代码示例和常见问题解决方案。重点解析了FPKM与TPM的数学原理及转换方法,帮助读者掌握RNA-seq数据分析中的关键预处理步骤,提升差异表达分析的准确性。

weixin_27442001的博客 495

数据库事务的简单介绍

事务和锁 一、什么是事务 事务是逻辑上的一组数据库操作,要么都执行,要么都不执行。 例子:假如张三要给李四转账200元,这个转账会涉及到两个关键操作就是:将张三的余额减少200元,将李四的余额增加200元。如果两个操作之间突然出现错误,例如银行系统崩溃导致张三余额减少,而李四的余额没有增加,这样的系统是有问题的。事务就是保证这两个关键操作要么都成功,要么都要失败。 事务的特性 ① 原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;例如转账的这两个关键操作(

qq_41116027的博客 1万+

《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记

软件工程任务:即时缺陷预测(涉及SE+AI知识)

weixin_43646592的博客 701

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1290

SQL中什么是事务

什么是SQL事务

YGC优快云的博客 5049

【YOLOv11多模态融合改进】| CVPR2025 LCA轻量交叉注意力 双向模态交叉引导 + 双支路噪点抑制,兼顾纹理与热目标特征融合

可见光模态富含纹理、色彩、边缘细节,但夜间/低照度场景信噪比极低,暗区噪声泛滥;红外模态依靠热辐射凸显弱小目标、暗区物体轮廓,但缺失真实色彩与精细纹理。简单拼接/逐加融合仅做浅层特征叠加,无法建立可见光纹理、红外热特征的双向引导关联,两类模态互补信息无法精准互通;普通自注意力仅单模态内部建模,跨模态交互匮乏,红外热目标易被可见光暗噪声淹没,可见光有效纹理易被红外灰度信息覆盖;

Limiiiing的博客 115

深入理解Oracle DB的事务

本节详细介绍Oracle DB的事务。

qq_45732829的博客 1663

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数据库事务的4个特性理解

说到数据库事务的特性 ,应该本能的说出acid这个单词 acid adj. 酸的; 酸性的; 酸味的; 尖刻的; n. <化>酸; 酸味物质; 原子性 Atomicity 要么做,要么不做。这个例子挺多的,就像二进制0/1 开关一样,要么开,要么关,不存在什么半开。还有类似boolean类型数据,就只有true ,false 。就像誓死如归...

master-dragon的专栏 1万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

理解数据库事务

事务(Transaction)是指对数据库进行的一系列操作,它们必须作为一个整体被执行。事务的基本要求是要么全部成功,要么全部失败。无论在执行过程中遇到什么问题,事务都应该保证原子性、一致性、隔离性和持久性。在数据库系统中,事务通常由若干个SQL语句组成,这些SQL语句在某个时刻必须被看作一个“整体”来执行。

m0_75260099的博客 940

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数据库事务和范式理解

前言 学习自用..网上大把资料,主要为了贴上自己理解.老实说标题和内容真难对的上..以后再修改下 事务的ACID 事务的atomicity, 事务的每项操作不会存在中间状态,做了就成功,失败了就相当于没做,(为什么要有这个概念的,为了防止并发让事务存在中间态吗,有什么数据库的原子性的反例吗) consistency一致性 数据库的状态要是一致的,(Q:这里说的状态一致是什么呢),A:数据库的状态的一致指的是完整性约束,完整性约束说的是数据库不能有不规范的数据,(TODO,这里的完整性约束),很多

ptgood的博客 1278

数据库中的事务理解

事务 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在计算机术语中,事务通常就是指数据库事务。 概念一个数据库事务通常包含对数据库进行读或写的一个操作序列。它的存在包含有以下两个目的: 1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。

zhangwj0101的博客 2万+

如何理解mysql数据库事务?

如何理解mysql数据库事务? MySQL 事务 作用:主要用于处理操作量大,复杂度高的数据。 举例说明:在人员管理系统中,你要删除一个人员信息,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务! 需要注意的是: 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。 事务处理可以用来维护数据库...

qq_36760873的博客 892

数据库事务(简单理解)

数据库事务(简单理解) 1.基本概念: 事务是将一系列的sql操作封装在一个单元中,这个单元叫做事务,事务要嘛都做,要嘛不做,事务可以撤销。 数据库事务与DML(Data Manipulation Langulage:数据库操纵语言)不可分割,是将一系列DML语句封装在一个单元中,这个单元被称为事务.一个事务中的DML语句必须全部执行或者全部不执行.如果一个事务在执行过程中部分DML语句已经执行,...

Yuanyi_1的博客 449

深入理解数据库事务

什么是事务 数据库几乎是所有系统的核心模块,它将数据有条理地保存在储存介质(磁盘)中, 并在逻辑上,将数据以结构化的形态呈现给用户。支持数据的增、删、改、查,并在过程中保障数据的正确且可靠。 要做到这点并非易事,常见的例子就是银行转账,A账户给B账户转账一个亿(T1),买一块地盖房子。在这种交易的过程中,有几个问题值得思考: 如何同时保证上述交易中,A账户总金额减少一个亿,B账户总金额增加一个...

Neo 1万+

数据库中事务理解

一、定义 事务一系列操作的集合。也可以理解为集合中的一系列操作协作完成事务。 二、特性 事务的特性也成为ACID特性。即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 1.原子性:原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的。 2.一致性:一致性是指数据库在事务操作前和事务处理后,其中

iamwiam的博客 1714

数据库事务的理解

事务四大属性(ACID)原子性-Atomicity一致性-Consistency隔离性-Isolation持久性-Durability隔离级别(Isolation Level)读未提交(Read uncommitted)读提交(Read committed)重复读(Repeatable read)序列化(Serializable)脏读(Drity Read)不可重复读(Non-repeatable...

石轩风的博客 363

有关mysql db事务隔离级别的一次实践及理解

面临的课题 订单在线处理系统需要增加一个计算器功能,统计某个商品的销量,然后根据商品的渠道销量设置当前这笔订单的佣金。 订单关键字段:tradeId,itemId,quantity 难点分析: 累加和计算这2个步骤都有可能抛异常,这两步操作整体要保持一致性,计算需要依赖于当前累加的结果。 如何解决 初步思路: 累加和计算必须保证原子性,要么一起成功,要么一起失败。即:如果累加...

玄大冰 284

彻底理解数据库事务

转载????: 事务 事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在计算机术语中,事务通常就是指数据库事务。 概念 一个数据库事务通常包含对数据库进行读或写的一个操作序列。它的存在包含有以下两个目的: 1、为数据库操作提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在异常状态下仍能保持一致性的方法。 2、当多个应用程序在并发访问数据库时,可以在这些应用程序之间提供一个隔离方法,以防止

RitaAndWakaka的博客 256
上一篇: mysql存储引擎的理解
下一篇: Mybatis下的九种设计模式
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值