事务的详解

server/2024/11/24 4:49:55/

什么是事务?

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

另外,需要格外注意的是:事务能否生效数据库引擎是否支持事务是关键。比如常用的 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 对象。


http://www.ppmy.cn/server/144439.html

相关文章

LLaMA-Factory 上手即用教程

LLaMA-Factory 是一个高效的大型语言模型微调工具,支持多种模型和训练方法,包括预训练、监督微调、强化学习等,同时提供量化技术和实验监控,旨在提高训练速度和模型性能。 官方开源地址:https://github.com/hiyouga/L…

疫情中的图书馆管理:Spring Boot系统设计

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了疫情下图书馆管理系统的开发全过程。通过分析疫情下图书馆管理系统管理的不足,创建了一个计算机管理疫情下图书馆管理系统的方案。文章介绍了疫情下图…

SHELL作业

要求: 通过shell脚本分析部署nginx网络服务 1.接收用户部署的服务名称 2.判断服务是否安装 ​ 已安装;自定义网站配置路径为/www;并创建共享目录和网页文件;重启服务 ​ 没有安装;安装对应的软件包 3.测试 判断服务是…

LangChain入门

LangChain入门 | 豆包MarsCode AI 刷题 本篇文章为《LangChain 实战课》前三节课的总结性文章,主要内容包含内容梳理与总结,学习记录,以及一些思考。 01开篇词|带你亲证AI应用开发的“奇点”时刻 内容 这篇文章介绍…

知从科技加入SOAFEE组织,携手推动汽车软件创新

在汽车行业迈向智能化、网联化的关键时期,知从科技受ARM邀请正式加入 SOAFEE(Scalable Open Architecture for Embedded Edge - 面向嵌入式边缘的可扩展开放架构)组织,这一战略举措标志着知从科技在全球汽车软件领域的进一步扩展和…

MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份

昨天(2024/11/18)碰到这么个问题,因为要控制成本,公司只愿意出两台服务器(很小的盒子)部署业务,采用传统的主备模式。这其中就包括Mongodb数据库,最稳固的方法当然是采用官方推荐的最低3台。但没…

网络协议之FTP

一、背景介绍 FTP,全称为文件传输协议(File Transfer Protocol),是一种用于在网络上进行文件传输的协议。它是互联网上最早出现的文件传输标准之一,使用广泛且成熟稳定。FTP协议通过客户端和服务器之间的交互&#xf…

.net6 使用 FreeSpire.XLS 实现 excel 转 pdf - docker 部署

FreeSpire.XLS && Aspose.Cells包都可以实现。实现过程中发现如下问题: 本地测试通过, docker部署服务器后报错: The type initializer for Spire.Xls.Core.Spreadsheet.XlsPageSetupBase threw an exception. 由于缺少依赖&#xf…