事物隔离级别
- 事物隔离级别是为解决脏读、幻读、不可重复读
- 脏读:尚未被确定提交的数据被其他事物读取到
- 幻读:进行select时间点上的数据与之后实际的情况不同,即会新增数据
- 不可重复读: 同一数据同时被多个事物读取,多个事物可对同一数据同时进行修改,造成数据前后不一致。
SERIALIZABLE 序列化
- 最高级别的事物隔离级别
- 事物按照顺序执行: 解决了脏读、幻读、不可重复读
REPEATABLE READ 可重复读
- 在进行Select时的数据将不可进行修改,但是数据可以新增
- 解决了脏读、不可重复读,会出现幻读
READ COMMITED 读提交
- 事物在读取数据后立即释放了读锁,导致其他事物可以修改此数据。
- 解决脏读,会出现幻读、不可重复读
READ UNCOMMITED 读未提交
- 数据在未提交时可以被其他事物读取
- 会出现 脏读、幻读、不可重复读
事物传播属性
REQUIRED
已存在一个事务,则加入该事务,否则创建一个新的事务.
Spring默认的传播行为
REQUIRES_NEW
- 创建新的事物,如果已经存在一个事物则挂起此事物、
SUPPORTS
- 如果存在以存在一个事物且则加入此事物,否则在无事物模式下运行
NOT_SUPPORTED
- 在无事物模式下运行,如果存在事物则挂起该事物
MANDATORY
- 强制使用事物,不存在事物则抛出异常
NESTED
- 当前存在事务,则将该方法运行在嵌套的事务中。被嵌套的事务可以从当前事务中单独的提交和回滚。如不存在事务,则创建新的事务
NEVER
- 在无事物环境下运行,如存在事物则抛出异常