数据库事务级别

事务四个特性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一起回滚。即外层事务失败时,会回滚内层事务所做的动作。而内层事务操作失败并不会引起外层事务的回滚