데이터베이스 기초
트랜잭션을 동시에 실행했을 때 일어나는 문제 중 더티 리드에 대한 설명으로 올바른 것은?
- A다른 트랜잭션이 아직 커밋하지 않은 갱신을 읽었는데, 그 트랜잭션이 롤백했기 때문에 존재하지 않았던 값을 사용해 버린다
- B같은 트랜잭션 안에서 같은 행을 두 번 읽으면, 그 사이에 다른 트랜잭션이 그 행을 갱신하고 커밋했기 때문에 값이 바뀌어 있다
- C같은 조건의 검색을 두 번 하면, 그 사이에 다른 트랜잭션이 행을 추가하고 커밋했기 때문에 행의 수가 바뀌어 있다
정답과 해설 보기
정답: A. 다른 트랜잭션이 아직 커밋하지 않은 갱신을 읽었는데, 그 트랜잭션이 롤백했기 때문에 존재하지 않았던 값을 사용해 버린다
더티 리드는 커밋되지 않은(확정되지 않은) 데이터를 읽어 버리는 문제입니다. 갱신한 트랜잭션이 나중에 롤백하면, 읽은 값은 한 번도 확정되지 않은 값이 되어 그것을 바탕으로 한 처리가 잘못됩니다. 같은 행을 두 번 읽었더니 값이 바뀌어 있었다는 것은 반복 불가능한 읽기(non-repeatable read)이고, 검색 조건에 맞는 행이 늘거나 줄어든 것은 팬텀 리드(팬텀)입니다. 이것들은 트랜잭션의 고립성(독립성)이 충분하지 않아서 일어나는 문제로, SQL에서는 격리 수준을 설정하여 어디까지 막을지를 고릅니다. READ COMMITTED 이상의 격리 수준에서는 더티 리드가 일어나지 않습니다.