首页 > 其他分享 >事务的详解

事务的详解

时间:2024-11-19 18:46:25浏览次数:3  
标签:转账 事务 要么 数据库 回滚 详解 日志

什么是事务?

事务是逻辑上的一组操作,要么都执行,要么都不执行。

另外,需要格外注意的是:事务能否生效数据库引擎是否支持事务是关键。比如常用的 MySQL 数据库默认使用支持事务的 innodb引擎。但是,如果把数据库引擎变为 myisam,那么程序也就不再支持事务了!

事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账 1000 元,这个转账会涉及到两个关键操作就是:

  1. 将小明的余额减少 1000 元。
  2. 将小红的余额增加 1000 元。

万一在这两个操作之间突然出现错误比如银行系统崩溃或者网络故障,导致小明余额减少而小红的余额没有增加,这样就不对了。事务就是保证这两个关键操作要么都成功,要么都要失败。

事务的特性(ACID)了解么?

  1. 原子性Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 一致性Consistency):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;
  3. 隔离性Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;
  4. 持久性Durability):一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响。

补充一点:只有保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。也就是说 A、I、D 是手段,C 是目的!

MySQL 怎么保证原子性的?

我们知道如果想要保证事务的原子性,就需要在异常发生时,对已经执行的操作进行回滚,在 MySQL 中,恢复机制是通过 回滚日志(undo log) 实现的,所有事务进行的修改都会先记录到这个回滚日志中,然后再执行相关的操作。如果执行过程中遇到异常的话,我们直接利用 回滚日志 中的信息将数据回滚到修改之前的样子即可!并且,回滚日志会先于数据持久化到磁盘上。这样就保证了即使遇到数据库突然宕机等情况,当用户再次启动数据库的时候,数据库还能够通过查询回滚日志来回滚之前未完成的事务。

什么是事务属性呢? 事务属性可以理解成事务的一些基本配置,描述了事务策略如何应用到方法上。

事务属性包含了 5 个方面:

  • 隔离级别
  • 传播行为
  • 回滚规则
  • 是否只读
  • 事务超时
TransactionStatus:事务状态

TransactionStatus接口用来记录事务的状态 该接口定义了一组方法,用来获取或判断事务的相应状态信息。

PlatformTransactionManager.getTransaction(…)方法返回一个 TransactionStatus 对象。

标签:转账,事务,要么,数据库,回滚,详解,日志
From: https://blog.csdn.net/weixin_53755148/article/details/143892752

相关文章

  • Abp.VNext-SaveChanges事务提交
    varblog=await_blogRepository.InsertAsync(ObjectMapper.Map<AddBlogInputDto,Blog>(inputDto));//查询不到数据,返回nullvarnewblog=await_blogRepository.FindAsync(blog.Id);//加上此行代码后,若插入异常,执行此行代码后回滚并且不会再往下走//不加此代码,若插......
  • 从0开始学习Linux——Shell编程详解【01】
    期目录:从0开始学习Linux——简介&安装从0开始学习Linux——搭建属于自己的Linux虚拟机从0开始学习Linux——文本编辑器从0开始学习Linux——Yum工具从0开始学习Linux——远程连接工具从0开始学习Linux——文件目录从0开始学习Linux——网络配置从0开始学习Linux——防......
  • WebSocket的应用:前后端详解与使用
    一、简介WebSocket是一种网络通信协议,它提供了在单个TCP连接上进行全双工通信的功能。在下面这个聊天应用示例中,WebSocket被用于实现实时的聊天功能,包括用户之间的消息发送、接收,用户状态管理以及其他相关的交互操作,为用户带来流畅的聊天体验。二、后端实现(一)模块引入与......
  • Linux常用命令之tar命令详解
    tar命令详解tar(TapeArchive)是Unix和Linux系统中一个非常强大的文件归档工具,用于创建、提取和管理归档文件。归档文件可以包含一个或多个文件和目录,常用于备份、存档和传输数据。tar支持多种压缩方式,如gzip、bzip2和xz。基本语法tar[选项][归档文件][文件或......
  • CLIP图像识别算法详解
    CLIP图像识别算法详解目录引言CLIP算法概述2.1基于Transformer架构2.2多模态预训练模型2.3跨模态表示学习工作原理3.1维度嵌入:文本与图像编码3.2对比性学习3.3输入两个相关/不相关的文本和图片对3.4计算它们之间的相似度预训练阶段4.1使用大量数据......
  • 详解RabbitMQ在Ubuntu上的安装
    ​​​​​​​目录Ubuntu环境安装安装Erlang查看Erlang版本退出命令​编辑安装RabbitMQ确认安装结果安装RabbitMQ管理界面启动服务查看服务状态通过IP:port访问添加管理员用户给用户添加权限再次访问Ubuntu环境安装安装ErlangRabbitMq需要Erlang语⾔的⽀......
  • CSS盒子模型的外边距详解
    CSS盒子模型的外边距(margin)是控制元素之间间距的重要属性。以下是与CSS盒子模型外边距相关的所有重要知识点:一、外边距的概念外边距是指盒子边框与其他元素边框之间的空白区域。它用于控制元素之间的距离,从而调整页面布局。二、外边距的设置在CSS中,可以使用margin属性......
  • 详解 fftw3
    FFTW3(FastestFourierTransformintheWestversion3)是一个用来计算离散傅里叶变换(DiscreteFourierTransform,DFT)及其逆变换的高效库。它由MatteoFrigo和StevenG.Johnson开发,是广泛使用的自由开源软件,专为高效的快速傅里叶变换设计,支持多种操作系统,包括Linux......
  • 详解 C++ 的内存序模型
    详解C++的内存序模型C++提供了内存序模型来控制多线程程序中不同线程对共享内存的访问顺序。最常用的是顺序一致性内存模型(memory_order_seq_cst),但它也提供了其他模型(如memory_order_relaxed)以优化性能。一、顺序一致性内存模型(memory_order_seq_cst)定义顺序一致性......
  • 【网络安全】-网络安全的分类详解_网络安全类型
    介绍网络安全是保护计算机系统、网络和数据免受未经授权的访问、攻击、破坏或泄露的实践。对于初学者来说,了解网络安全的分类是建立安全意识的关键。在本教程中,我们将深入研究网络安全的不同方面,从基础理论到实际操作,以帮助小白用户更好地保护自己的数字生活。1.网络层......