http://www.sqler.com/327147

Repeatable Read 관련 설명입니다.

 

큰 이미지 파일은 첨부파일을 참조하세요. ^^.

 

Repeatable_Read_Small.jpg

 

1. Session 1.

  - 테이블을 생성합니다.

 

2. Session 1.

  - 데이터를 넣습니다. 이 때 10, 30, 50 으로 넣습니다.

 

3. Session 1.

  - Transaction을  REPEATABLE READ 로 걸고 10에서 50 범위를 SELECT 합니다.

  - 당연히 10, 30, 50 값만 나옵니다.

 

4. Session 2.

  - 테이블에 20, 40 값을 넣습니다. 데이터는 정상적으로 들어갑니다.

 

5. Session 2.

  - 20과 40 값을 지웁니다. 정상적으로 삭제됩니다.

 

6. Session 2.

  - Session2에서 30 의 값을 변경하려고 하면 Transaction 으로 인해 변경되지 않고 계속 대기하게 됩니다.

 

7. Session 1.

  - Rollback 하여 Session 1의 REPEATABLE READ 를 해제합니다.

  - INSERT가 아닌 SELECT기 때문에, 테이블에는 10, 30, 50이 남은 상태로 존재합니다.(20, 40 은 이미 삭제된 상태)

 

8. Session 1.

  - 3. 과 같이 SELECT 합니다.

 

9. Session 2.

  - 4. 와 같이 데이터 20, 40 을 넣습니다. 정상적으로 삽입됩니다.

 

10. Session 1.

  - 같은 트랜잭션 내에서 다시 한 번 SELECT 합니다.

  - 이렇게 되면 기존에 읽은 값 뿐만 아니라 Session 2.에서 입력한 20과 40도 표시되어 Pantom Read 가 됩니다.

 

11. Session 2.

  - 5. 와 같이 20과 40 값을 삭제하려고 하면, 10.에서 SELECT 한 Transaction의 영향으로 DELETE 가 되지 않습니다.

  - 6. 과 같이 30의 값을 변경하려고 해도 당연히 안됩니다.

 

어제 1 Page PPT에서 설명했던 내용을 간단하게 적어 보았습니다.

단... 배경그림은 집중도를 떨어뜨릴 것 같아서 뺐습니다. ㅋ.

+ Recent posts