什么是事务
事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作。这些操作作为一个整体一起向系统提交,要么都执行,要么都不执行。事务是一组不可再分隔的操作集合。
事务的四大特性
1.原子性:
事务中包含的各操作要么都执行,要么都不执行。
2.一致性:
事务的一致性是指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态。也就是说,事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态,因此当数据库只包含成功事务提交 的结果时,就能说数据库处于一致性状态。而如果数据库系统在运行过程中发生故障, 有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。
3.隔离性
一个事务的执行不能被其他事务干扰。
4.持久性
一个事务一旦提交,它对数据库中数据到改变应该是永久性的。
Spring事务的优点
它极大减小了样板式代码,提高了代码的清晰性和维护性。
@Transactional使用注意事项
● Spring默认情况会对(RuntimeException)及其子类来进行回滚,在遇见Exception及其子类的时候则不会进行回滚操作。
● @Transactional注解只能被应用到public方法上,这是由Spring Aop本质决定的。
@Transactional注解属性含义
● value:可选的限定描述符,指定使用的事务管理器。
● propagation:设置可选的事务传播行为
● isolation:可选的事务隔离级别设置
● readOnly:读写或只读事务,默认读写
● timeout:事务超时时间设置
● rollbackFor:导致事务回滚的异常类数组
● rollbackForClassName:导致事务回滚的异常类名称数组
● noRollbackFor:不会导致事务回滚的异常类数组
● noRollbackForClassName不会导致事务回滚的异常类名称数组
重点关注propagation,isolation
● Propagation.REQUIRED:如果有事务,那么加入事务,没有的话创建一个新的事务
● Propagation.NOT_SUPPORTED:这个方法不开启事务
● Propagation.REQUIREDS_NEW:不管是否存在事务,都创建一个新的事务,将原来的挂起,新的执行完毕,继续执行老的事务。
● Propagation.MANDATORY:必须在一个已有的事务中执行,否则抛出异常。
● Propagation.NEVER:不能在一个事务中执行,就是当前必须没有事务,负责抛出异常。
● Propagation.SUPPORTS: