네 개의 격리 수준 MySQL의 트랜잭션

거래의 기본 요소 :

  원 자성 (자성) : 중간 오류가 발생하면 트랜잭션이 시작되기 전에 트랜잭션의 시작 후 모든 작업 중 하나를 모두 성공적으로 실행은 트랜잭션 다시 상태로 롤백됩니다.

  일관성 ( 일관성 ) : 트랜잭션의 시작 후 데이터베이스의 무결성 제약 조건은 예를 들어, 손상되지 :. A와 B 양도 금액의 공제, B가 누락받지 못한

  분리 ( 절연 ) 동시에, 동일한 데이터에 대해 하나 개의 트랜잭션 요청은 다른 트랜잭션 사이에는 상호 간섭이 존재하지 않는다.

  영구 (내구성) : 트랜잭션의 종료 후, 트랜잭션이 데이터베이스에 대한 모든 업데이트가 데이터베이스에 보관하고 롤백 할 수 없습니다.

트랜잭션 동시성 문제

  더러운 읽기 : 트랜잭션 B는 업데이트 된 데이터를 읽어 트랜잭션은 트랜잭션 B A 데이터가 더러 읽기 트랜잭션을 롤백

  트랜잭션은 트랜잭션 동안 여러 번 B, 트랜잭션을 동일한 데이터를 여러 번 읽고, 데이터와 동일한 데이터를 반복적으로 읽을 트랜잭션 A, 일치하지 않는 결과에 여러 업데이트, 결과를 제출 반복 할 수없는 읽기

  매직 읽기 : ABCD 등급의 특정 부분에서 모든 데이터베이스 변경에 대한 시스템 관리자 학생들의 성취도는 원래 관리 시스템은 데이터가하지만, 하룻밤 변화가 발견되지 특정 점수를 원래 후 변경된 B 학생 관리 시스템을 추가 할 수 있습니다. 같은 환각.

요약 :

  수정 된 비 반복 읽기에 무게, 조건을 충족하는 데 걸리는 잠금 솔루션을 행. 팬텀, 솔루션 잠금 테이블을 삽입하고 무게를 삭제 읽기

MySQL의 트랜잭션 격리 수준

트랜잭션 격리 수준 더러운 읽기 비 반복 읽기 매직 읽기
읽기 커밋 (읽기 uncommit) 그것은이다 그것은이다 그것은이다
비 반복 읽기 (읽기 최선을 다하고 있습니다) 아니오 그것은이다 그것은이다
반복 읽기 (반복-읽기) 아니오 아니오 그것은이다
직렬화 (직렬화) 아니오 아니오 아니오

MySQL의 기본 트랜잭션 격리 수준 : 반복 읽기 (-reeatable 읽기)

스프링의 트랜잭션 관리에서

  트랜잭션 추상화

  일관성있는 트랜잭션 모델을 제공합니다 (JDBC / 최대 절전 모드 / MyBatis로 /은 dataSource / JTA)

  

  트랜잭션 인터페이스

  PlatformTransactionManager를

      • 의 DataSourceTransactionManager
      • HibernateTransactionManager를
      • JtaTransactionManager를

  트랜잭션 관련 메소드

  보이드 커밋 (된 TransactionStatus 상태 ) 가 발생 TransactionException은 단계;

   보이드  롤백 (위해 TransactionStatus 상태가 발생  TransactionException은 단계;

  된 TransactionStatus getTransaction ( @Nullable TransactionDefinition의 정의 ) 가 발생  TransactionException은 단계;

 

  거래 관련 정의

   TransactionDefinition 

     특성 :

     전파 (전파 모드)

     절연 (절연)

     시간 제한

        읽기 전용 상태 (true 또는 false)    

   사용자 정의 서비스 : 

  // 其中 dataSource 框架会自动为我们注入
  @Bean(name = "MyTransaction")
  public PlatformTransactionManager txManager(@Qualifier("MyDataSource") DataSource dataSource) {
   return new DataSourceTransactionManager(dataSource);
  }

 

  传播特性

传播性 描述
PROPAGATION_required 0 当前有事务就用, 没有事务就新建一个事务(默认)
PROPAGATION_supports  1 事务可有可无,不是必须的
PROPAGATION_mandatory   2 当前一定要有事务,不然就抛出异常    
PROPAGATION_REQUIRED_NEW   3 无论是否有事务,都创建一个新事务    
PROPAGEATION_NOT_SUPPORTS 4
不支持事务,按照非事务方式进行
PROPAGEATION_NAVER   5
不支持事务,如果有事务则抛出异常
PROPAGEATION_NESTED 6 当前有事务就在当前事务内在起一个事务,内部事务不影响外部事务

 

 

 

 

 

 

 

 

事务隔离特性

隔离性 脏读 不可重复读取 幻读
ISOLATION_READ_UNCOMMITTED (未提交) 1
ISOLATION_READ_COMMITTED(不可重复读取) 2 ×
ISOLATION_REPEATABLE_READ(可重复读取) 3 × ×
ISOLATION_SERIAILZABLE(串行化) 4 × × ×

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

추천

출처www.cnblogs.com/shar-wang/p/11615760.html