什么叫事务

举个例子更能容易理解:

加入有多个sql语句(insert,update,del等等)
要一块执行,

比如说,创建一个用户,需要操作三个表,三个sql.

sql1:='insert.....';
sql2:='insert table2...';
sql3:='insert table3...';
假如不加事务, 到sql1,sql2都执行通过,但是sql3 执行错误了..
就有可能造成数据库的相关数据不同步.

这时候就需要加个事务

事务开始
sql1:='insert.....';
sql2:='insert table2...';
sql3:='insert table3...';
事务提交

如果中间发生意外,就事务回滚...

除非三个sql都执行通过,事务提交后,所有的数据才最终写入数据库,
如果任何一条sql执行错误, 事务回滚,, 前面操作成功的sql也将无效.
所有数据都不会写入库. 保证数据库各个表数据一致.

这就是事务.
在 Java 应用开发中,事务(Transaction)是指一组逻辑操作单元,这些操作要么全部成功执行,要么全部失败回滚,以确保数据的一致性和完整性。事务通常用于处理涉及多个步骤的数据操作,例如银行转账、订单提交等业务场景,其中任何一个步骤的失败都会导致整个事务被撤销[^1]。 Java 中的事务管理可以通过多种方式实现,包括 JDBC 事务、JTA(Java Transaction API)事务以及容器管理事务[^1]。JDBC 事务是基于数据库连接的本地事务,适用于单一数据源的操作;而 JTA 事务则是 Java EE 提供的分布式事务管理接口,支持跨多个资源(如多个数据库或消息队列)的事务协调[^2]。此外,在 Spring 框架中,事务管理得到了进一步简化和抽象,通过声明式事务配置(如 `@Transactional` 注解),开发者可以非常方便地开启和管理事务[^2]。 ### Java 事务的基本特性(ACID) - **原子性(Atomicity)**:事务是一个不可分割的工作单位,事务中的所有操作要么全部完成,要么全部不完成。 - **一致性(Consistency)**:事务必须保证系统从一个一致的状态转换到另一个一致的状态。 - **隔离性(Isolation)**:多个事务并发执行时,一个事务的执行不应影响其他事务的执行。 - **持久性(Durability)**:一旦事务提交,其对数据的修改应该是永久性的,即使系统发生故障也不应丢失[^3]。 ### 示例代码 以下是一个使用 Spring 的声明式事务管理的简单示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service public class AccountService { @Autowired private AccountRepository accountRepository; @Transactional public void transferMoney(Long fromAccountId, Long toAccountId, double amount) { Account fromAccount = accountRepository.findById(fromAccountId).orElseThrow(); Account toAccount = accountRepository.findById(toAccountId).orElseThrow(); fromAccount.setBalance(fromAccount.getBalance() - amount); toAccount.setBalance(toAccount.getBalance() + amount); accountRepository.save(fromAccount); accountRepository.save(toAccount); } } ``` 上述代码中,`@Transactional` 注解表明该方法需要在一个事务上下文中执行。如果方法执行过程中抛出异常,则事务会自动回滚;否则,事务会在方法正常结束时提交。 ### 注意事项 - 在使用事务时,应当避免在同一个事务中嵌套不同类型的事务管理机制,比如不要在 JTA 事务中嵌套 JDBC 事务[^1]。 - 事务应尽可能短小,避免长时间占用资源,从而提高系统的并发性能。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值