什么是事务?它有哪些属性?
时间: 2024-02-03 15:51:05 浏览: 22
事务是指在数据库中执行的一组操作,这组操作要么全部执行成功,要么全部不执行。事务具有以下四个属性,通常称为 ACID 属性:
1. 原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部回滚,不能只执行其中的一部分操作。
2. 一致性(Consistency):事务的执行不会破坏数据库的完整性约束,即事务执行前后,数据库的状态保持一致。
3. 隔离性(Isolation):多个事务并发执行时,每个事务的执行都不会被其他事务干扰或影响,每个事务都感觉不到其他事务的存在。
4. 持久性(Durability):事务完成后,对数据库的修改应该永久保存到数据库中,即使系统发生故障也不应该丢失。
相关问题
@Transactional注解有哪些属性可以配置?
`@Transactional`是Spring框架中的一个注解,用于标记方法或类,以控制数据库操作(如插入、更新、删除)的并发性和事务管理。它提供了对事务行为的灵活配置,主要的属性包括:
1. ** propagation (传播行为)**: 指定当此@Transactional声明的方法被调用时,如果当前没有事务,则是开启一个新的事务,还是加入到现有的事务中。可选值有REQUIRED, SUPPORTS, REQUIRES_NEW, NOT_SUPPORTED, NEVER等。
2. ** isolation (隔离级别)**: 设置事务的隔离级别,防止脏读、不可重复读和幻影读。常见的隔离级别有ISOLATION_DEFAULT(由底层数据库决定)、READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE。
3. ** rollbackFor (触发回滚的异常)**: 定义当抛出指定类型的异常时,事务自动回滚。可以是一个或多个异常类型,也可以是自定义异常类。
4. ** noRollbackFor (不触发回滚的异常)**: 相反,当抛出这些异常时,不会触发回滚,通常用于处理预期的业务异常。
5. ** readOnly (只读事务)**: 如果设置为true,表示该事务不允许修改数据,主要用于读取操作优化。
6. ** timeout (超时时间)**: 设置事务的超时时间,单位通常是秒。
7. ** name (事务名称)**: 可选属性,提供自定义的事务名称。
8. ** rollbackOnCommitFailure (提交失败时回滚)**: 是否在提交事务失败时自动回滚,默认情况下Spring会重试。
9. ** savepointManager (保存点管理器)**: 可选的SavepointManager接口实现,用于高级事务管理。
10. ** readOnlyProperties (只读属性列表)**: 可选,指定哪些属性在只读事务中仍然允许修改。
通过这些属性,你可以根据需要定制事务的行为,确保代码的健壮性和数据一致性。如果你需要更详细的例子或进一步了解如何使用它们,可以告诉我。
springboot有哪些事务类型?
在 Spring Boot 中,可以使用以下几种事务类型:
1. **PROPAGATION_REQUIRED**:如果当前没有事务,则创建一个新的事务。如果当前已经有事务,则加入到当前事务中。
2. **PROPAGATION_SUPPORTS**:如果当前有事务,则加入到当前事务中执行。如果当前没有事务,则以非事务的方式执行。
3. **PROPAGATION_MANDATORY**:如果当前有事务,则加入到当前事务中执行。如果当前没有事务,则抛出异常。
4. **PROPAGATION_REQUIRES_NEW**:无论当前是否有事务,都会创建一个新的事务。如果当前已经有事务,则挂起当前事务。
5. **PROPAGATION_NOT_SUPPORTED**:以非事务的方式执行。如果当前有事务,则挂起当前事务。
6. **PROPAGATION_NEVER**:以非事务的方式执行。如果当前有事务,则抛出异常。
7. **PROPAGATION_NESTED**:如果当前有事务,则嵌套在当前事务中执行。如果当前没有事务,则创建一个新的事务。
除了事务类型,还可以使用 `isolation` 属性来设置事务隔离级别,以及 `readOnly` 属性来设置事务是否只读。例如:
```java
@Transactional(propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
readOnly = false)
public void saveUser(User user) {
userRepository.save(user);
}
```
需要注意的是,事务类型和属性的选择应该根据具体的业务情况而定。最好根据实际情况进行测试和调整。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)