해당 강의를 보면서 공부한 내용을 정리하였습니다.

Dirty Read는 데이터베이스 트랜잭션의 일관성과 격리 수준을 위반하는 현상입니다. 여기서 "Dirty"란 아직 커밋되지 않은 데이터 변경을 의미합니다. 특정 트랜잭션이 데이터를 수정한 후 커밋하지 않은 상태에서 다른 트랜잭션이 해당 변경사항을 읽는 경우를 가리킵니다.
이 경우, 트랜잭션 A는 Dirty Read를 경험하게 됩니다. 왜냐하면 트랜잭션 B의 변경사항이 커밋되지 않았음에도 불구하고 트랜잭션 A가 해당 변경사항을 읽었기 때문입니다.

"Nonrepeatable Read"는 한 트랜잭션 내에서 같은 데이터를 여러 번 읽을 때마다 서로 다른 값이 반환되는 현상을 의미합니다. 이로 인해 데이터의 일관성과 격리 수준을 위반하는 문제가 발생할 수 있습니다.
transaction의 isolation 관점에서 읽어나면 안되는 현상입니다. 왜냐하면 여러 트랜잭션이 동시에 실행되도 각각의 트랜잭션이 독립적으로 실행되어야 하기 때문입니다.
트랜잭션 A가 데이터 X의 값을 읽습니다.
이후 트랜잭션 B가 동일한 데이터 X에 40을 더합니다.
트랜잭션 A가 다시 데이터 X의 값을 읽습니다. 이때 A는 첫 번째 읽었을 때의 값인 10 아닌 50을 읽게 됩니다.

"Phantom Read"는 한 트랜잭션 내에서 같은 쿼리를 여러 번 실행할 때, 각 실행에서 결과 집합에 새로운 데이터가 추가되거나 삭제되는 현상을 의미합니다.
이 경우, 트랜잭션 A는 Phantom Read를 경험하게 됩니다. 같은 범위 내에서 같은 쿼리를 여러 번 실행해도 결과 집합이 다른 데이터를 포함하게 되는 것이 문제입니다.
Phantom Read 역시 트랜잭션의 격리 수준(Isolation Level)을 위반하여 데이터의 일관성을 해치는 문제입니다. 새로운 데이터가 나타나거나 삭제됨으로써 데이터의 정합성을 유지하기 어려워집니다.

이때, 트랜잭션 A가 Rollback되면 x의 값은 트랜잭션 A의 시작 시점 전의 값으로 롤백됩니다.
이렇게 되면, 트랜잭션 B의 결과가 사라지게 됩니다.

Lost Update는 데이터베이스 트랜잭션에서 발생하는 현상으로, 두 개 이상의 트랜잭션이 동시에 같은 데이터를 수정하는 경우에 발생하는 문제를 의미합니다. 이때, 먼저 실행된 트랜잭션이 후에 실행된 트랜잭션의 변경 내용을 덮어쓰게 되어 변경 사항이 손실되는 상황을 말합니다.

"Abort 없이 발생하는 Dirty Read"는 다른 트랜잭션이 데이터를 변경 중이지만 아직 커밋되지 않은 상태에서 해당 변경 내용을 읽는 경우를 가리키는 개념입니다.
이러한 상황에서는 트랜잭션 B가 아직 커밋되지 않은 트랜잭션 A의 변경 내용을 읽음으로써 부정확한 정보를 얻을 수 있습니다. x,y의 합이 100이여야 하는데, 60이 나옵니다. 이는 데이터의 무결성과 일관성을 해치는 문제를 일으킬 수 있습니다.

Phantom Read의 확장판은 트랜잭션이 같은 조건을 여러 번 읽는 경우가 아니더라도, 서로 연관된 데이터를 읽는 과정에서 이상 현상이 발생하는 상황을 가리킵니다. 이를 이해하기 위해 특정 시나리오를 예시로 살펴보겠습니다.