事务:事务就是逻辑上的一组操作,要么全部成功,要么全部失败。在事务执行的过程中能出现任何问题,若出现问题整个事务都会执行失败,恢复原来的样子。
事务的特性:
ACID:
1:原子性:指的是事务是一个整体是不可分割的。
2:一致性:指的是事务执行的前后,数据的完整性保持一致。
3:隔离性:一个事务内部的操作及使用的数据对并发的其他事务是隔离的(一个事务执行的时候,不受到其他事务的干扰)
4:持久性:事务一旦提交,对数据库的改变是永久的。(数据永久的保存在数据库中)
事务的隔离级别:
脏读: 一个事务读取了另一个事务未提交的数据。
不可重复读: 一个事务读取另一个事务已经提交(update)的数据,导致一个事务多次查询数据的结果不一致。
幻读: 一个事务读取了另一个已经提交(insert)的数据,导致一个事务多次查询数据的结果不一致。
隔离级别:
1.默认的:数据库中默认的隔离级别
2.未提交读:以上情况都有可能发生。
3.已提交读:可以防止脏读,但是不可重复读和幻读有可能发生。
4.可重复读:可以防止脏读,不可重复读。但是幻读有可能发生。
5.串行的:可以避免上面所有的可能。(这是所有隔离级别中效率最慢的)
事务的传播行为
事务的传播行为: 解决业务层之间的调用事务的关系。(只有两个业务类的方法相互调用时,传播行为才会有效)
1.PROPAGATION_REQUIRED (必须的):支持当前事务,如果没有事务,就新建一个事务。
eg:事务A,B。 如果A有事务,B使用A的事务,如果A没有事务,则B就新开一个事务。(A、B在同一个事务当中)
2 .PROPAGATION_SUPPORTS(支持的):支持当前事务,如果没有,就不使用事务(有就用,没有就不用)
eg:事务A,B。如果A有事务,B使用A的事务,如果A没有事务,B也不使用事务。
3.PROPAGATION_MANDATORY: 支持当前事务,如果不存在抛出异常。
eg:事务A,B。如果A有事务,B使用A的事务,如果A没有事务,抛出异常。
4.PROPAGATION_REQUIRES_NEW:如果存在事务,挂起当前事务,创建一个新事务。(总会创建新的事务)
eg:事务A,B。如果A有事务,B将A的事务挂起,重新创建一个新事务。(A,B不在同一个事务内,事务互不影响)
5.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果有事务存在,挂起当前事务
eg:事务A、B。如果A有事务,就会挂起当前事务。
6.PROPAGATION_NEVER:以非事务方式运行,存在事务跑出异常
eg:事务A、B。如果A有事务,跑出异常。
7.PROPAGATION_NESTED :如果当前事务存在,则嵌套事务执行
eg: A,B A有事务,A执行之后,将A事务执行之后的内容保存到SavePoint.B事务有异常的话,用户需要自己设置事务提交还是回滚.
常用:
PROPAGATION_REQUIRED
PROPAGATION_REQUIRES_NEW
PROPAGATION_NESTED