事务的隔离级别和传播行为

[size=medium]事务的隔离级别和传播行为
事务的隔离级别:

数据库系统提供了4种事务隔离级别,在这4种隔离级别中,Serializable的隔离级别最高,Read Uncommitted的隔离级别最低;

· Read Uncommitted 读未提交数据;(会出现脏读)

· Read Committed 读已提交数据;

· Repeatable Read 可重复读;

· Serializable 串行化



事务的传播属性包括:

· Required 业务方法需要在一个事务中运行,如果一个方法运行时已经处在一个事务中,那么加入到该事务,否则为自己创建一个新事务,80%的方法用到该传播属性;

· Not-Supported

· Requiresnew

· Mandatoky

· Supports

· Never

· Nested

Spring优点:
1.规范程序员的编程习惯。
2.通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯;
3.能使EJB的使用成为一个实现选择,而不是必须选择,你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码;
4.使用Spring构建的应用程序易于单元测试;
5.Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,他们适用于许多web应用。例如:Spring能使用AOP提供声明性事务管理而不通过EJB容器;
6. 使用Spring构建的应用程序易于单元测试;
7.Spring为数据存取提供了一个一致的框架不论使用的是JDBC还是O/R mapping产品;
[/size]
事务隔离级别传播行为在数据库事务管理中发挥着关键作用,它们分别保障了事务的并发控制事务方法之间的协作。 事务隔离级别定义了一个事务对其他事务的影响程度,解决了多事务并发操作时可能出现的问题,如脏读、不可重复读幻读。常见的隔离级别有 `ISOLATION_DEFAULT`、`ISOLATION_READ_UNCOMMITTED`、`ISOLATION_READ_COMMITTED`、`ISOLATION_REPEATABLE_READ` `ISOLATION_SERIALIZABLE`。不同的隔离级别提供了不同程度的并发控制数据一致性保障: - `ISOLATION_READ_UNCOMMITTED`:允许一个事务读取另一个事务未提交的数据,这是最低的隔离级别,可能会导致脏读、不可重复读幻读问题,但并发性能最高[^4]。 - `ISOLATION_READ_COMMITTED`:保证一个事务只能读取另一个事务修改并提交后的数据,避免了脏读问题,但仍可能出现不可重复读幻读[^4]。 - `ISOLATION_REPEATABLE_READ`:保证一个事务在执行期间多次读取同一数据时,其结果保持一致,避免了脏读不可重复读,但仍可能出现幻读[^4]。 - `ISOLATION_SERIALIZABLE`:最高的隔离级别,确保所有事务串行执行,避免了脏读、不可重复读幻读问题,但并发性能最低[^4]。 事务传播行为定义了事务方法在调用时如何与现有事务进行交互。当一个事务方法调用另一个事务方法时,传播行为决定了新方法是否会加入现有事务,还是创建一个新的事务。常见的传播行为有 `REQUIRED`、`REQUIRES_NEW`、`NESTED` 等。不同的传播行为适用于不同的业务场景: - `REQUIRED`:如果当前存在一个事务,则加入该事务;如果不存在,则创建一个新的事务。这是最常用的传播行为,适用于大多数业务场景[^5]。 - `REQUIRES_NEW`:无论当前是否存在事务,都会创建一个新的事务。新事务与现有事务相互独立,一个事务的回滚不会影响另一个事务[^5]。 - `NESTed`:如果当前存在一个事务,则在该事务内部创建一个嵌套事务;如果不存在,则创建一个新的事务。嵌套事务是外部事务的一部分,外部事务的回滚会导致嵌套事务的回滚,但嵌套事务的回滚不会影响外部事务[^5]。 ```java import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @Service public class MyService { // 使用REQUIRED传播行为ISOLATION_READ_COMMITTED隔离级别 @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED) public void methodA() { // 执行数据库操作 } // 使用REQUIRES_NEW传播行为ISOLATION_SERIALIZABLE隔离级别 @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.SERIALIZABLE) public void methodB() { // 执行数据库操作 } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值