Skip to content

Latest commit

 

History

History
45 lines (40 loc) · 2.51 KB

File metadata and controls

45 lines (40 loc) · 2.51 KB

SpringbootMina

事物详解

隔离级别

public enum Isolation {
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);
}
  • DEFAULT :默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常值为:READ_COMMITTED
  • READ_UNCOMMITTED :该隔离级别表示一个事物可以读取另一个事物修改但还没有提交的数据。该级别不能防止脏读和不可重复读,很少使用
  • READ_COMMITTED :该隔离级别表示一个事物只能读取另一个事物已经提交的数据。该级别可以防止脏读,大多数的推荐值
  • REPEATABLE_READ :该隔离级别表示一个事物在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。可以防止脏读和不可重复读
  • SERIALIZABLE :所有事物依次逐个执行,这样的事物之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读、以及幻读。但是会严重影响性能。通常不会用到

传播行为

public enum Propagation {
    REQUIRED(0),
    SUPPORTS(1),
    MANDATORY(2),
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4),
    NEVER(5),
    NESTED(6);
}
  • REQUIED : 如果当前存在事物,则加入该事物;如果当前没有事物,则创建一个新的事物
  • SUPPORTS :如果当前存在事物,则加入该事物;如果当前没有事物,则以非事物的方式继续运行
  • MANDATORY :如果当前存在事物,则加入该事物;如果当前没有事物,则抛出异常
  • REQUIRES_NEW :创建一个新事物,如果当前存在事物,则把当前事物挂起
  • NOT_SUPPORTED :以非事物方式运行,如果当前存在事物,则把当前事物挂起
  • NEVER :以非事物方式运行,如果当前存在事务,则抛出异常
  • NESTED :如果当前存在事物,则创建一个事物作为当前事物的嵌套事物来运行;如果当前没有事物,则该取值等价于REQUIRED

脏读:A事物读取了B事物修改但未提交的数据

不可重复读:在一个事物内,多次读同一数据,数据不一致

幻读:事务1读取指定的where子句所返回的一些行。然后,事务2插入一个新行,这个新行也满足事务1使用的查询 where子句。然后事务1再次使用相同的查询读取行,但是现在它看到了事务2刚插入的行。