한빛아카데미 - 데이터베이스 개론 2판
트랜잭션 transaction
: 논리적인 작업의 단위로, 하나의 작업을 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것
데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다.
원자성 : 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다. (all-or-nothing)
일관성 : 트랜잭션이 성공적으로 수행된 후에도 DB가 일관된 상태를 유지해야한다.
격리성(고립성) : 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션이 접근할 수 없다.
지속성(영속성) : 트랜잭션이 성공적으로 완료된 후 DB에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 한다.
활동 상태 active
: 트랜잭션이 수행되기 시작하여 현재 수행 중인 상태부분 완료 상태 partially committed
: 트랜잭션의 마지막 연산이 실행된 직후의 상태완료 상태 committed
: 트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태실패 상태 failed
: HW/SW 문제, 트랜잭션 내부 오류 등 여러 이유로 장애가 발생하여 트랜잭션의 수행이 중단된 상태철회 상태 aborted
: 트랜잭션을 수행하는 데 실패하여 rollback 연산을 실행한 상태commit
: 트랜잭션이 성공적으로 수행되었음을 선언(작업 완료) => 트랜잭션을 수행한 최종 결과를 DB에 반영
rollback
: 트랜잭션을 수행하는 데 실패했음을 선언(작업 취소) => 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 이전의 산태로 돌아감
트랜잭션에서 일관성 없는 데이터를 허용하는 수준
Read Uncommitted [LOW]
Read Commited
Repeatable Read
Serializable [HIGH]
Dirty Read
: committed 하지 않은 트랜잭션이 쓴 값을 읽는 것
Non-Repeatable Read
: 한 트랜잭션에서 그 트랜잭션이 write연산을 수행하지 않음에도, 처음 읽은 값과 나중에 읽은 값이 다르게 되는 것
Phantom Read
: 서로 간 tuple의 충돌이 없었음에도 불구하고 결과가 serialize하지 않게 값이 읽히는 것
https://developyo.tistory.com/236
https://yeol-study-history.tistory.com/106