- 특징(acid)
- 원자성(atomicity): 더 이상 분해가 불가능한 업무의 최소 단위로 전부 처리되거나 하나도 처리되지 않아야 함
- 일관성(consistency): 트랜잭션이 수행되기 전과 후가 모두 일관된 상태여야 함
- 격리성(isolation): 실행중인 트랜잭션의 중간 격과에 다른 트랜잭션이 접근할 수 없음
- 영속성(durability): 트랜잭션이 완료되면 데이터베이스에 영구적으로 저장됨
- 격리성
- 문제점
- dirty read: 다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는 것
- non-repeatable read
- 한 트랜잭션 내 같은 키를 가진 레코드를 2번 읽었는데, 그 사이 값이 변조되어 결과가 다르게 나타나는 현상
- 1개의 열에 있는 데이터 값이 변경되는 케이스
- phantom read
- 한 트랜잭션 내 같은 쿼리를 2번 수행했는데, 첫 번째 쿼리에서 없던 레코드가 두 번째 쿼리에서 나타나는 현상
- 다건을 요청할 때 데이터의 값이 변경되는 케이스
- 수준
- read uncommitted
- 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
- dirty read, non-repeatable read, phantom read가 발생할 수 있음
- 정합성 문제가 있기때문에 권장 설정이 아님
- read committed
- 트랜잭션이 커밋되어 확정된 데이터만 다른 트랜잭션이 읽는 것을 허용
- dirty read의 가능성을 막음
- 커밋되지 않은 데이터는 실제 db 데이터가 아닌 undo 로그에 있는 이전 데이터를 가져옴
- non-repeatable read, phantom read가 발생할 수 있음
- repeatable read
- 트랜잭션 내에 삭제/변경은 undo 로그에 넣어두고, 앞서 발생한 트랜잭션은 실제 데이터가 아닌 undo 로그에 있는 백업 데이터를 읽도록 함
- 트랜잭션 중 값 변경을 일정한 값으로 처리할 수 있음
- 삭제와 수정을 불일치하게 하던 non-repeatable read를 해결할 수 있음
- serializable read
- 트랜잭션 내 쿼리를 2번 이상 수행할 때 1번째 쿼리에 있던 레코드가 사라지거나, 새로운 레코드가 나타나지 않도록 설정
- read uncommitted
- 문제점