Transaction

简介: ACID特性原子性(Atomicity)事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。一致性(Consistency)执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱吧。

ACID特性

原子性(Atomicity)事务必须是一个不可分割的整体,就像我们在化学课里学到的原子,原子是构成物质的最小单位。

一致性(Consistency)执行完数据库操作后,数据不会被破坏。打个比方,如果从 A 账户转账到 B 账户,不可能因为 A 账户扣了钱,而 B 账户没有加钱吧。

隔离性(Isolation)保证数据库操作之间是“隔离”的(线程之间有时也要做到隔离),彼此之间没有任何干扰。

持久性(Durability)数据库必须要保证有一条数据永久地存放在磁盘

这 4 条特性,是事务管理的基石,原子性是基础,隔离性是手段,持久性是目的,最重要的就是一致性。

事务并发引发的问题

Dirty Read(脏读)事务 A 读取了事务 B 未提交的数据,并在这个基础上又做了其他操作。

Unrepeatable Read(不可重复读)事务 A 读取了事务 B 已提交更改数据。

Phantom Read(幻读)事务 A 读取了事务 B 已提交新增数据。

JDBC的解决方案

获取默认隔离级别

DatabaseMetaData meta = DBUtil.getDataSource().getConnection().getMetaData();

int defaultIsolation = meta.getDefaultTransactionIsolation();

spring的解决方案

事务传播行为(Transaction Propagation Behavior)Spring 解决的只是方法之间的事务传播

假设事务从方法 A 传播到方法 B,面对方法 B,问自己一个问题,方法 A 有事务吗?

PROPAGATION_REQUIRED  如果没有,就新建一个事务;如果有,就加入当前事务。Spring 提供的默认事务传播行为,适合绝大多数情况。
RROPAGATION_REQUIRES_NEW  如果没有,就新建一个事务;如果有,就将当前事务挂起。意思就是创建了一个新事务,它和原来的事务没有任何关系了。
PROPAGATION_NESTED  如果没有,就新建一个事务;如果有,就在当前事务中嵌套其他事务。当主事务提交或回滚,子事务也会提交或回滚。
PROPAGATION_SUPPORTS  如果没有,就以非事务方式执行;如果有,就使用当前事务。
PROPAGATION_NOT_SUPPORTED  如果没有,就以非事务方式执行;如果有,就将当前事务挂起。
PROPAGATION_NEVER  如果没有,就以非事务方式执行;如果有,就抛出异常。
PROPAGATION_MANDATORY  如果没有,就抛出异常;如果有,就使用当前事务。

事务超时(Transaction Timeout)

为了解决事务时间太长,消耗太多的资源,所以给事务设置一个最大时长,如果超过了,就回滚事务。

只读事务(Readonly Transaction)

为了忽略那些不需要事务的方法,比如读取数据,这样可以有效地提高一些性能。

 ps:

可在 @Transactional 注解中设置:事务隔离级别、事务传播行为、事务超时时间、是否只读事务。

 

目录
相关文章
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
280 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
6天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
397 38
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
669 220
|
1天前
|
Windows
dll错误修复 ,可指定下载dll,regsvr32等
dll错误修复 ,可指定下载dll,regsvr32等
131 95
|
11天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1654 158
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
909 61