事务(Transactional)--一个操作序列---就是命运共同体

事务是数据库管理中的核心概念,确保操作的原子性、一致性、隔离性和持久性。当事务执行中出现错误时,事务回滚能够撤销所有已完成的操作,防止数据不一致。事务用于复杂操作,如人员管理系统中的删除操作,保证所有相关记录一同删除以维护数据完整性。事务的隔离级别(如读未提交、读已提交等)控制了并发操作的影响,而持久性则保证了即使系统故障,已完成的事务更改也会保存下来。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把将要执行的命令步骤给包裹在事务中,使之随时能检测命令的运行过程的异常,及时止血,防止半途而废
事务(Transactional)–一个操作序列—就是命运共同体
1.这个操作序列作为一个整体,要么都执行,要么都不执行
2.一荣则荣,一损则损,保证数据库中数据永远保持一致性否则出岔子
原子性:
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。

一致性:
在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。

隔离性:
数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。

持久性:
事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
事务主要用于处理操作量大,复杂度高的数据。
比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!如果不当时删除,那么后边的数据库数据表可能会出现不一致性,不完整性。

事务回滚的诞生:
–目的保证已经操作的步骤撤销,防止数据库的数据不一致性(因为有的删掉了,但是后边没有被成功删掉,就会不一致,所以需要回滚回去)

当事务执行过程中遇到错误时,该事务修改的所有数据都恢复到事务开始时的状态或某个指定位置,事务占用的资源将被释放。

事物回滚;
事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。事务的定义必须在连接打开后,提交必须在关闭以前

### Spring 事务传播行为 Spring 定义了多种事务传播行为来决定当一个方法被另一个带有事务的方法调用时,两者之间的关系。具体来说,存在七种不同的传播行为[^1]: - **REQUIRED**:如果有现有事务,则加入该事务;如果没有则创建一个新的事务- **REQUIRES_NEW**:总是启动新的事务,在新事务执行业务逻辑,即使外部已有事务也暂停旧的并开启新的。 - **SUPPORTS**:若有现成的事务便参与其中,反之不运行于任何事务上下文中。 - **NOT_SUPPORTED**:完全不在事务环境中执行,如有活动事务会挂起它。 - **MANDATORY**:强制要求有活跃事务环境,否则抛异常。 - **NEVER**:绝对不允许在事务范围内工作,一旦检测到事务即刻报错。 - **NESTED**:如果当前存在事务,则在其内部建立子事务;若无则按 REQUIRED 处理。 ```java @Transactional(propagation = Propagation.REQUIRED) public void methodA() { // 方法体... } ``` ### MySQL 事务隔离级别及其与 Spring 的关联 MySQL 提供了几种标准的事务隔离级别以确保数据读取的一致性和准确性[^2]: - **READ UNCOMMITTED (未提交读)**:最低级别的隔离度,允许脏读、不可重复读和幻影读现象发生。 - **READ COMMITTED (已提交读)**:防止脏读的发生,但仍可能出现不可重复读和幻影读的情况。 - **REPEATABLE READ (可重复读)**:这是 InnoDB 存储引擎默认采用的方式,默认情况下能阻止前两种问题,但在某些场景下仍可能发生幻影读。 - **SERIALIZABLE (序列)**:最高程度的隔离等级,杜绝一切并发冲突的可能性,但性能开销较大。 在 Spring 中可以通过 `@Transactional` 注解指定特定的操作应该遵循哪个隔离级别: ```java @Transactional(isolation = Isolation.SERIALIZABLE) public void criticalOperation() { // 关键操作代码... } ``` ### Spring 和 MySQL 之间关于事务管理的合作方式 当应用程序使用 Spring 进行开发并与 MySQL 数据库交互时,二者共同协作完成复杂的业务需求。一方面,Spring 负责定义事务边界并通过 AOP 技术自动管理和协调事务生命周期;另一方面,MySQL 则依据所设定的隔离级别保障每次查询或更新都能获得一致的结果集。这种组合不仅简化了开发者的工作量还提高了系统的稳定性和可靠性[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值