거래의 기본 요소 :
원 자성 (자성) : 중간 오류가 발생하면 트랜잭션이 시작되기 전에 트랜잭션의 시작 후 모든 작업 중 하나를 모두 성공적으로 실행은 트랜잭션 다시 상태로 롤백됩니다.
일관성 ( 일관성 ) : 트랜잭션의 시작 후 데이터베이스의 무결성 제약 조건은 예를 들어, 손상되지 :. 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 | × | × | × |