事务四个特性ACID
Atomicity 原子性
Consistency 一致性
Isolation 隔离性
Durability 持久性
数据库在高并发下会产生三个问题, 有并发事务A,B
脏读: A读取了B未提交的数据,
不可重复读:A第一次查询数据,B更新数据并提交,A第二次查询,读出B更新后的数据,导致两次查询不一致
幻读:A查询数据库,B新增或删除数据,A第二次查询数据不一致
为解决这三个问题,数据库设置四个隔离级别
READ_UNCOMMITED: 允许脏读,不可重复读,幻读
READ_COMMITED:不允许脏读
REPEATABLE_READ:不允许脏读,不可重复读
SERIALIZABLE:都不允许
Spring 七种事务传播属性
PROPAGATION_REQUIRED :没有事务就新建,有就加入到当前事务中
PROPAGATION_NEW:没有事务就新建,有事务挂起当前事务,新开一个事务。如果methodA调用methodB,B查到A中事务,挂起A事务,新开另一事务,A,B此时是独立的两个事务,即B提交后A回滚也不会影响B。
PROPAGATION_SUPPORT :有事务就以事务方式运行,没有事务就以非事务方式运行。
PROPAGATION_NOT_SUPPORT:没有事务就以非事务方式运行,有事务就挂起当前事务,以非事务方式运行。
PROPAGATION_MANDATORY:有事务加入当前事务,没有事务抛出异常
PROPAGATION_NEVER :有事务抛出异常,没有事务正常运行。
PROPAGATION_NEST:没有事务就新建,有事务就嵌套一个事务,如果methodA调用methodB,A中有事务,B中回滚不会影响A,A方法继续执行,如果A回滚会连带B一起回滚。即外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚