>  기사  >  Java  >  Spring 트랜잭션 격리 수준에 대한 자세한 설명

Spring 트랜잭션 격리 수준에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-03 10:18:451516검색

Spring에는 5가지 트랜잭션 격리 수준이 정의되어 있습니다.
1. ISOLATION_DEFAULT(일반적으로 이 구성을 사용할 수 있습니다) ;

이것은 PlatfromTransactionManager 기본 격리 수준입니다. 데이터베이스기본 트랜잭션 격리 수준을 사용합니다.
2. ISOLATION_READ_UNCOMMITTED 4 p" L. I' F; k1 {) a. D( E5 ?: V
이것은 트랜잭션에 대한 가장 낮은 격리 수준으로, 다른 트랜잭션을 허용합니다. 이 트랜잭션의 커밋되지 않은 데이터를 볼 수 있습니다. 이 격리 수준은 더티 읽기, 반복 불가능한 읽기 및 팬텀 읽기를 생성합니다.
이 상황은 대부분의 데이터베이스의 기본 트랜잭션 격리 수준에서는 발생하지 않습니다. 1. G7 다른 트랜잭션은 이 트랜잭션의 커밋되지 않은 데이터를 읽을 수 없습니다. 이 트랜잭션 격리 수준은 더티 읽기를 방지할 수 있지만 반복 불가능한 읽기 및 팬텀 읽기가 발생할 수 있습니다. : U8 m# n8 g1 k( E: N

더티 리드(dirty read)란 무엇입니까? ( 수정 및 커밋 해제로 인해 발생)
예: Zhang San's 급여가 5000이고, 트랜잭션 A는 급여를 8000으로 변경했지만 트랜잭션 A는 아직 제출되지 않았습니다. 동시에 트랜잭션 B는 Zhang San의 급여를 읽고 있으며 Zhang San의 급여가 8000이라고 읽습니다. 그런 다음 트랜잭션에서 예외가 발생합니다. A. 그리고 트랜잭션은 롤백되었습니다. Zhang San의 급여는 5000으로 롤백되었습니다. 마지막으로 트랜잭션 B가 읽은 Zhang San의 급여 8000은 더티 데이터이며, 트랜잭션 B는 더티 읽기를 수행했습니다. # i) s$ i
(이 상황은 대부분의 데이터베이스의 기본 트랜잭션 격리 수준에서는 발생하지 않습니다.)
N$ ~" J7 a& Y* ?/ G8 I 4. ISOLATION_REPEATABLE_READ
이 트랜잭션 격리 수준은 더티 읽기와 반복 불가능한 읽기를 방지할 수 있지만 팬텀 읽기가 발생할 수 있습니다. 반복 읽기?(로 인한 수정)
6 h2 E% J, S7 f9 n+ m0 U4 ]" ?% e. a
예: / ^7 Y# T6 |& Z' B
거래 A에서 Zhang San의 급여가 5000으로 읽혀집니다. 작업이 완료되지 않았으며 거래가 아직 제출되지 않았습니다. 5 K: N6 c" [$ p: J4 L/ I" B동시에 거래 B는 Zhang San의 급여를 8000으로 변경하고 거래를 제출했습니다. 이후 트랜잭션 A에서는 Zhang San의 급여를 다시 읽어서 급여가 8,000이 됩니다. 트랜잭션에서 두 번의 읽기 결과가 일관되지 않아 읽기가 반복되지 않습니다.
(이 상황은 대부분의 데이터베이스의 기본 트랜잭션 격리 수준에서는 발생하지 않습니다.) .h+ U! y9 {) }1 R8 ~% B, l
5. >이것은 가장 비싸지만 가장 안정적인 트랜잭션 격리 수준입니다. 트랜잭션은 순차적 실행으로 처리됩니다. 더티 읽기 및 반복 불가능한 읽기를 방지하는 것 외에도 팬텀 읽기도 방지됩니다. % c0 @8 E& g" x1 . |9 w9 N+ ~
예:
A에는 현재 10명의 직원이 있고 급여는 5,000입니다. 트랜잭션 A는 급여가 5,000인 직원 10명을 모두 읽습니다. 이때 트랜잭션 B는 급여가 5000이라는 기록을 삽입합니다. 이는 트랜잭션 A가 급여가 5000인 직원을 읽었을 때 기록이 11명인 경우입니다. 이러한 상황은 기본적으로 발생합니다. 대부분의 데이터베이스의 트랜잭션 격리 수준입니다. 이 트랜잭션 격리 수준은 테이블 수준 잠금을 가져옵니다.
_! O3 W6 M/ L
설명: Oracle
기본 트랜잭션 격리입니다. 더티 읽기 및 반복 불가능한 읽기는 방지됩니다. 그러나 팬텀 읽기에는 테이블 수준 잠금이 필요합니다. Oracle의 기본 행 수준 잠금에서는 ISOLATION_SERIALIZABLE 트랜잭션 격리 수준을 신중하게 사용해야 합니다. 이는 성능에 큰 영향을 미칩니다. 일반적으로 특별한 필요가 없으면 데이터베이스의 기본 트랜잭션 격리 수준을 사용하도록 구성하면 됩니다. 위는 Spring의 격리 수준에 대한 자세한 설명입니다. 거래 등 관련 내용은 PHP 중국어 홈페이지(www.php.cn)


를 참고해주세요.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.