데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위
- 하나의 트랜잭션은 Commit 되거나 Rollback 된다.
- Commit :
- 트랜잭션에 대한 모든 작업이 성공적으로 끝났을 때, 트랜잭션이 행한 모든 연산을 DB에 반영한다.
- Rollback :
- 하나의 트랜잭션 처리가 비정상적으로 종료되었을 때, 이 트랜잭션이 행한 모든 연산을 취소(Undo)한다.
- Commit :
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 성질을 가리키는 약어
- Atomicity(원자성)
: All or Noting
: 트랜잭션 내 모든 연산은 모두 수행되거나, 아니면 모두 수행되지 않아야 한다. - Consistency(일관성)
: 어떤 트랜잭션이 수행되기 전에 데이터베이스가 일관된 상태를 가졌다면, 수행된 후에도 일관된 상태를 가진다 - Isolation(고립성)
: 각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야 한다. - Durability(내구성)
: 트랜잭션이 정상적으로 종료된 다음에는 데이터베이스에 작업의 결과가 영구적으로 저장되어야 한다.
트랜잭션 격리수준은 Isolation(고립도)와 성능의 트레이드 오프를 조절합니다.
-
READ UNCOMMITTED
: 다른 트랜잭션에서 커밋되지 않은 데이터도 참조할 수 있다. -
READ COMMITTED
: 다른 트랜잭션에서 커밋된 데이터만 참조할 수 있다. -
REPEATABLE READ
: 트랜잭션에 진입하기 이전에 커밋된 데이터만 참조할 수 있다.
: 트랜잭션 진입 전에 스냅샷을 떠놓고 그 스냅샷만을 참조한다. -
SERIALIZABLE
: 트랜잭션에 진입하면 락을 걸어 다른 트랜잭션이 접근하지 못하게 한다. -
DEFAULT
: 사용하는 DB 기본 설정을 따른다.
: (Oracle 은 READ_COMMITED, Mysql InnoDB 는 REPEATABLE_READ 가 Default) -
낮은 단계의 Isolation Level 이용시 발생하는 현상
- Dirty Read
- 어떤 트랜잭션에서 아직 실행이 끝난지 않은 다른 트랜잭션의 변경 사항을 보게 되는 되는 현상
- Non-Repeatable Read
- 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때
- 그 사이에 다른 트랜잭션이 기존 레코드를 수정 또는 삭제되어, 두 쿼리의 결과가 상이하게 나타나는 비 일관성 현상
- Phantom Read
- 한 트랜잭션에서 같은 쿼리를 두 번 수행할 때
- 그 사이에 다른 트랜잭션이 새로운 레코드를 삽입하여, 첫 번째 쿼리에서 없던 레코드가 두 번째 쿼리에서 나타나는 현상
- Dirty Read