데이터를 제자리에서 덮어쓰지 않고 변경 시 새로운 버전을 하나 더 만들어 둔다.
각 트랜잭션은 시작 시점(or 특정 시점)의 스냅샷을 기준으로 데이터를 읽기 때문에, 다른 트랜잭션이 수정중이어도 일관된 읽기가 가능하다. 덕분에 읽기 작업은 보통 락을 잡지 않고 수행되고, 쓰기 충돌이 날 때만 롤백, 재시도를 통해 정합성을 맞춘다.
MVCC와 격리수준과의 관계
Read Committed: 매 쿼리마다 최신 커밋 버전 기준으로 본다.
Repeatable Read: 트랜잭션 시작 시점 스냅샷을 유지한다. 따라서 한 트랜잭션 안에서는 동일한 스냅샷을 바라본다.