InnoDB는 Repeatable Read를 기본 격리 수준으로 가져갑니다. 다른 DB와는 다르게 InnoDB의 Repeatable Read 레벨에서는 Phantom Read가 발생하지 않으며, 이는 언두 로그와 넥스트 키락을 통해 막아주고 있습니다.
InnoDB는 일반 SELECT 상황에서는 락을 걸지 않습니다. 이는 언두 로그를 이용하기 때문에 가능합니다.
SELECT FOR UPDATE에서는 데이터 변경을 대비해 락을 걸게 됩니다. 이때 InnoDB에서는 검색 및 인덱스 스캔 과정에서 일반 레코드 락이 아니라 넥스트 키 락
을 사용해 팬텀 리드를 방지하고 있습니다.
이것은 Repeatable Read에 국한된 내용으로 하위 레벨(read commited, read uncommited)인 경우 넥스트 키 락이 아니라 레코드 락이 걸려 팬텀 리드를 방지할 수 없습니다.
넥스트 키 락은 레코드 락과 갭 락을 혼합한 방식입니다.