트랜잭션

격리수준

여러 트랜잭션이 동시에 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지 결정함

READ UNCOMMITTED (커밋되지 않은 읽기)

각 트랜잭션의 변경 내용이 commit이나 rollback 여부에 상관 없이 다른 트랜잭션에서 보임

READ COMMITTED (커밋된 읽기) - Oracle

어떤 트랜잭션에서 데이터를 변경했더라도 commit이 완료된 데이터만 다른 트랜잭션에서 조회 가능

테이블 데이터 ⇒ (’한국’, ‘서울')

[A 세션] 트랜잭션 시작

[A 세션] 데이터 변경 (‘한국’, ‘서울’) → (’한국’, ‘경기’)

[B 세션] 트랜잭션 시작 

[B 세션] 조회: (’한국’, ‘서울’)

[A 세션] 커밋

[B 세션] 조회: (’한국’, ‘경기’)

⇒ 한 트랜잭션 내에서 같은 쿼리문이 실행되었음에도 불구하고 조회 결과가 다른 문제(Phantom read)

REPEATABLE READ (반복 가능한 읽기) - MySQL

InnoDB 스토리지 엔진은 트랜잭션이 Rollback 될 가능성에 대비해 변경되기 전 레코드를 언두 공간에 백업해두고 실제 레코드 값 변경