Repeatable Read 관련 설명입니다.
큰 이미지 파일은 첨부파일을 참조하세요. ^^.
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에서 설명했던 내용을 간단하게 적어 보았습니다.
단... 배경그림은 집중도를 떨어뜨릴 것 같아서 뺐습니다. ㅋ.