트랜잭션의 영역, 바운더리를 지정하기 위한 설정이다.
종류 | 트랜잭션존재 | 트랜잭션미존재 | 비고 |
---|---|---|---|
REQUIRED | 기존 트랜잭션 이용 | 신규 트랜잭션 생성 | 기본설정이다 |
SUPPORTS | 기존 트랜잭션 이용 | 트랜잭션 없이 수행 | |
MANDATORY | 기존 트랜잭션 이용 | Exception 발생 | 꼭 이전트랜잭션이 있어야 하는경우 |
NEVER | exception이 발생한다 | 정상적으로 트랜잭션 없이 수행 | 트랜잭션 없을때만 작업이 진행되어야할때 |
NOT_SUPPORTED | 트랜잭션이 종료될 때 까지 대기한 후 트랜잭션이 종료되고 나면 실행 | 트랜잭션 없이 로직이 수행 | 기존 트랜잭션에 영향을 주지 않아야할때 사용된다. |
REQUIRES_NEW | 현재 트랜잭션이 종료될 때 까지 대기한 후 새로운 트랜잭션을 생성하고 실행 | 신규 트랜잭션을 생성하고 로직을 실행 이전트래잭션과 구분하여 새로운 트랜잭션으로만 처리가 필요할때 사용 | |
NESTED | 현재 트랜잭션에 Save Point를 걸고 이후 트랜잭션을 수행 | REQUIRED와 동일하게 신규 트랜잭션을 생성하고 로직이 수행 | DBMS특성에 따라 지원 혹은 미지원 |
동시 트랜잭션이 수행될때 다른 트랜잭션이 동일한 데이터에 대해서 어떻게 보일지에 대한 범위를 나타낸다.
Dirty Read
, Non-Repeatable Read
, Phantom Read
현상이 모두 발생한다.Dirty Read
가 발생하지 않는다.Non-Repeatable Read
현상과 Phantom Read 현상이 발생한다.Dirty Read
, Non-Repeatable Read
현상이 발생하지 않는다.Phantom Read
현상이 발생한다.현재 트랜잭션에서 커밋되지 않은 변경 데이터를 다른 트랜잭션이 읽을 수 있음을 의미한다.
가장 먼저 데이터를 읽은 데이터가, 다른 트랜잭션에서 변경을 했고, 이후 다시 데이터를 읽을때 변경된 데이트를 읽을 수 있음을 의미한다. (즉, 먼저 변경한 쪽의 데이터를 다시 읽게 됨을 의미)
다른 트랜잭션이 신규 데이터를 추가하거나, 기존 데이터를 삭제할때, 범위 쿼리를 수행하면 데이터 row가 달라지는 현상을 말한다.