서비스 및 트랜잭션 격리

   첫째, 거래의 개념 , • 트랜잭션은 불가분의 단위 트랜잭션의 모든 작업이 제대로 성공적으로 실행되면 전체 트랜잭션이 데이터베이스에 제출 된 단지로 구성된 데이터베이스 작업을위한 하나 또는 여러 개의 SQL 문으로 구성되어있다.

     주 : 1. 업무 성공 또는 실패, 부분 성공과 실패가 원자 작동을 보장하기 위해 나타나지 않을 수 있습니다 모든 수행, SQL 문장의 집합을 수행하는 것입니다.

                2, 데이터 트랜잭션의 모든 거래를 제출 (커밋)하기 위해, 성공적으로 실행되고, 결과는 디스크에 기록됩니다.

                3 구현 과정에서 트랜잭션 SQL 오류가 발생한있다 트랜잭션 다시 (롤백) 초기 상태로 압연한다.

   둘째, 트랜잭션의 역할

엔터프라이즈 애플리케이션 트랜잭션 관리는 배경 데이터의 무결성을 훼손하지 않는 특별한 방문이 있었다하더라도, 모든 사용자 작업이 신뢰할 수있는 보장 중요합니다. 은행 현금 지급기 ATM과 마찬가지로, ATM은 일반적으로 고객 서비스 정상이 될 수 있지만, 또한 필연적으로 발생하고 계정이 아닌 이전 작업의 자신의 갑작스러운 고장이 시간, 트랜잭션이 문제없이 작동을 확인해야합니다 사용자와 은행의 이익이 손실되지 않도록으로 사용자가 ATM 기계를 사용하지 않은 것처럼, 적용됩니다.

  세, 트랜잭션의 ACID 특성 : (4)

           1 원자 (원자)

                트랜잭션은 원자 특성, 모든 모든 실행 실행 여부 중 하나 불가분의 거래를해야합니다, 불가분 전체입니다. 모든 트랜잭션의 모든 하위 트랜잭션이 성공적으로 제출하면 모든 데이터베이스 작업, 데이터베이스 상태 변경을 제출, 서브 트랜잭션, 데이터베이스 작업 다른 서브 트랜잭션이 롤백 실패가있는 경우, 트랜잭션 실행 이전의 상태로 반환되는 데이터베이스, 상태 전이가 발생하지 않습니다

           2 일관성 (일관성)

                트랜잭션 데이터베이스를 실행되도록 올바르게 하나의 상태로부터 다른 상태로의 정확한 변환

           (3) 분리 (절연)

                두 개 이상의 트랜잭션이 데이터 보안을 보장하기 위해 동시 작업을 잠 경우 적절한 트랜잭션이 커밋하기 전에 트랜잭션은 수도, 제대로 트랜잭션 전에 제출 된 다른 문제에 제공되는 데이터를 변경할 수 없습니다 결과는 다른 문제에 표시되지해야

           4, 지속성 (내구성)

                 트랜잭션이 제대로 제출 후, 결과는 항상 심지어는 다른 실패 트랜잭션이 커밋 된 후, 트랜잭션 처리 결과는 보존됩니다뿐만 아니라 문제 해결 후 데이터를 복구와 함께 데이터베이스에 저장됩니다.

   네 개의 동시 트랜잭션이 다음 문제가 발생합니다 (3)

         1 더티 읽기

           받는 소위 더러운 읽기, 의미 트랜잭션 트랜잭션 B는 데이터가 제출되지 않은 읽습니다. (1000)는 이러한 트랜잭션 B, 열려있는 트랜잭션 트랜잭션 B로 전환 은행, 열린 트랜잭션 A를 거래로 총 돈이 -> ATM (100), 스위치 트랜잭션 A와 다시하지만,이 시간이 시간 읽기 트랜잭션 A가 은행 자금 만 900 그러나 때문에 작업 뒤에 부적절한 트랜잭션 B, 성공적으로 롤백 후, 계정 또는 확실히 원래 균형의 균형하지만, 트랜잭션에이 한 데이터베이스 (100)를 제거되지, 철수 중단 선도의 만 900 은행 자금을 읽고 , 더러운이다 읽어 보시기 바랍니다.

        2, 비 반복 읽기

           소위 비 반복 읽기를 의미 두 번 데이터를 판독 데이터 불일치의 읽기 트랜잭션 . 또는 은행 돈, 예를 들어, 트랜잭션 A가 열려있는 트랜잭션 -> $ 1000 발견 은행 카드 잔액, 열린 트랜잭션의 트랜잭션 트랜잭션 B B로 전환하려면이 시간 - 데이터베이스 내부> 제출 -> B 트랜잭션은 $ 100.00를 제거 9백위안에 균형이 시점에서 트랜잭션이 두 번 같은 트랜잭션에서 트랜잭션 소위, 체크 다시 한번 900위안의 계정 잔액을 찾아내는 거래로 전환하는하지 않은, 일치하지 않는 계정 잔액 데이터를 읽을 수 반복 읽기.

        3, 팬텀 읽기

          소위 팬텀 읽기를 의미 하나의 트랜잭션 작업에서 작동되지 않은 데이터를 찾을 수 있습니다 . 예를 들어, 학생 정보, 트랜잭션 A는 트랜잭션 열기 - 다음 트랜잭션 거래로 전환> 트랜잭션 B는 학생 데이터를 삽입 -> 일 조건이, B, 열린 트랜잭션 서비스에 B로 전환하려면이 시간에 거래 거짓임을 참석 한 모든 학생들을 수정 제출 시간이 나는 같은 환각을 일어난 것처럼, 마법을 읽을 수있는 수정 된 데이터를 발견하지 않았다. 전제 팬텀 읽기 동시 트랜잭션이 트랜잭션이 장소 취한입니다 발생 삽입, 삭제 작업을.

   다섯 , 트랜잭션 격리 수준 (5)

   1, DEFAULT (기본 격리 수준)

    각 데이터베이스가 지원하는 트랜잭션 격리 수준이 동일하지 않습니다,이 값으로 절연 설정하면 Spring 설정 트랜잭션, 기본 데이터베이스의 다음 기본 트랜잭션 격리 수준.

    당신이 MySQL을 사용하는 경우 그건 그렇고, 당신은 "사용 은 SELECT @@ TX_ISOLATION을 기본 트랜잭션 격리 수준을 검토"

   도 2는 READ_UNCOMMITTED (확약 읽기)

     즉, 제출되지 않은 다른 트랜잭션에 데이터를 읽을 수있는,이 레벨이 분리 메커니즘에 해결할 수없는 것은 분명하다 읽기 더러운 , 반복 불가능한 읽기 , 유령 읽기 때문에 거의 사용하지 않는 중 하나를

   3, READ_COMMITED (읽기 커밋)

    즉 자연적으로 더러운 읽기 방지 할 수 있습니다 제출 된 데이터를 읽을 수 있지만 제한 할 수 없습니다 비 반복 읽기팬텀 읽기

   4 REPEATABLE_READ (반복 읽기)

   데이터가 유사 잠금을 읽어 후 즉, "XXX에서 업데이트 * 선택"입니다 , 명확한 데이터를 읽어 그래서 다른 사람이 수정 방지하기 위해 잠금 장치를 추가하는 업데이트를 사용하는 것입니다. REPEATABLE_READ 의미는이,이 더러운 읽기, 반복 불가능한 읽기 문제를 해결하는 것, 다른 트랜잭션이 레코드를 변경할 수 없습니다 트랜잭션의 끝이 아니다, 데이터 읽기, 비슷하지만 팬텀 읽기 문제가 해결되지

   5 SERLALIZABLE (직렬화 / 직렬화)

   ,이 더러운를 해결하는 것이 가장 높은 트랜잭션 격리 수준, 얼마나 많은 거래에 상관없이, 다른 트랜잭션 내에서 모든 하위 트랜잭션을 실행할 수있는 하나 하나의 트랜잭션으로 모든 아이들을 실행 한 후 트랜잭션 읽기 및 팬텀 문제를 읽어 반복 불가능한 읽기

               

       참고 : 트랜잭션 격리 수준이 너무 높게 가능한 트랜잭션 격리 수준이 높게 설정되어 설정되어 있지, 잠금 수단은 거래의 정확성을 보장하기 위해 수단을 취할 수밖에 없다, 그 효율은 실제 개발 너무 자주, 줄일 수 효율성과 동시에 유효성 정상적인 상황에서 선택을 할 사이 READ_COMMITED으로 설정되어 오염을 피하기 위해 이번에는 동시성 비 반복 읽기를 해결하는 다른 방법에 의해 다음 나중에도 좋고, 판독 팬텀 문제 읽기 잘.

 

       여섯째, 비즈니스 SQL의 트랜잭션

       제출의 일을 확인하십시오 : @@ 자동 커밋을 선택;

      

       1 자동으로 SQL 문은 트랜잭션이라고 제출할 때 트랜잭션이 자동으로 제출 나타냅니다.

        0은 트랜잭션이 커밋 사용하려면 수동으로 할 때 수동 제출을 제출 나타낸다 전술을 업데이트 할 때 문 제출이 다른 트랜잭션에 의해 감지됩니다.

   제 1 항에있어서, 집합 트랜잭션 커밋 : SET를   자동 커밋 [. 1] = 0;

       

       거래를 켜고 3 : 시작;

       4. 트랜잭션 커밋 : 커밋을;

      다시 롤 초기 상태로 거래 : 롤백 (rollback);

       6. 위치 T와 같은 세이브 설정 : T 세이브 그;

       세이브 위치 T 7. 롤백 : T에 ROLLBACK;

    참고 : 일반적으로 명령 3-7, 수동 제출을 사용하는 경우.

 

      확인하고 격리 수준을 수정하는 일곱 가지

       1. 확인 트랜잭션 격리 수준 : @@ tx_isolation을 선택 

       2. 수정 현재 세션의 트랜잭션 격리 수준 : 다음 SET 트랜잭션 격리 세션 수준 직렬화; (매개 변수가 될 수 있습니다 읽기 확약되지 않은 | 읽기 최선을 다하고 | 반복이 읽기 | 직렬화)

        3. 수정 글로벌 트랜잭션 격리 수준 : 다음 SET 트랜잭션 격리 공사 무료 수준 직렬화에 참여, (매개 변수가 될 수 있습니다 읽기 확약되지 않은 | 읽기 최선을 다하고 | 반복이 읽기 | 직렬화)

         참고 :            

             같은 MyBatis로, getSqlSession (같은 세션), 당신은 단지 효과적으로 시간 동안 세션을 얻을 수에 대한 트랜잭션 격리 수준을 수정 그러한 CMD 명령 라인으로 만 이번에는 윈도우가 유효합니다.

             이후의 모든 세션에 대해 다음 유효한 글로벌 트랜잭션 격리 수준, 수정, 기존 세션의 영향을받을 수 없습니다 .

 

       권장 사항 : HTTPS : //www.cnblogs.com/snsdzjlz320/p/5761387.html,

 

    

추천

출처www.cnblogs.com/ljl150/p/12005660.html