2023-java-study / book-study

북 스터디 기록 레포지토리
0 stars 0 forks source link

REPEATABLE READ 격리수준 #159

Open NuhGnod opened 1 year ago

NuhGnod commented 1 year ago

REPEATABLE READ 격리 수준에서는 p.181의 실행 중인 트랜잭션 가운데 가장 오래된 트랜잭션 번호보다 트랜잭션 번호가 앞선 언두 영역의 데이터는 삭제할 수가 없다.

마찬가지로 그림 5.7에서도 테이블이 아닌 언두 로그에서 조회하면 될 것 같은데 select ... for update 쿼리는 언두 레코드에 잠금을 걸 수 없으니 현재 레코드의 값을 가져오게 된다 의 의미?

ssstopeun commented 1 year ago

select ... for update 는 select하는 레코드에 쓰기 잠금을 걸어야 나중에 어떤 값이 추가됐을 때도 변화가 없을텐데 언두레코드는 잠금을 걸 수 없으니까 어쩔 수 없이 테이블의 코드를 가져오게 되는것 같습니다.

gmelon commented 1 year ago

이 부분이 너무 어렵네요

select ... for update 는 select하는 레코드에 쓰기 잠금을 걸어야 나중에 어떤 값이 추가됐을 때도 변화가 없을텐데 언두레코드는 잠금을 걸 수 없으니까 어쩔 수 없이 테이블의 코드를 가져오게 되는것 같습니다.

저도 이렇게 이해하고 넘어가긴 했는데 테이블에도 TRX-ID가 기록되어 있는데 사용자 B가 실행한 TRX-ID : 10 이전의 데이터만 테이블에서 가져오면 해결되는 문제 아닌가 하고 생각이 듭니다.

어떻게 생각하세요?