트랜잭션이란 질의(query)를 하나의 묶음 처리하는 하나의 작업수행의 논리적 단위이다. DB의 트랜잭션의 내용은 스크립트 형태로 되어있다. 즉 절차적이라고 할 수 있다.
START
query 1
query 2
query 3
query 4
...
END
시작과 끝이 존재하고 시작부터 끝까지를 단위화하여 생성된 논리블럭이 실행되었을 때 논리블럭이 온전히 실행되어야 한다.(시작 부터 끝까지 전부 실행성공) 하지만 질의가 단 하나라도 실행이 실패하게 된다면 논리블럭이 시작하기 이전 시점으로 돌려야 한다.
Transaction의 특성을 이야기할 때 ACID특성이라 하며 간단히 살펴보면 아래와 같다.
원자성(Atomicity)
일관성(Consistency)
격리성(Isolation)
지속성 (Durability)
commit
를 하면 현재 상태는 영원히 보장된다.트랜잭션이 실행되어 영속화 되어 있는 데이터를 변경하려고 할 때 바로 적용되는 것이 아니다.
위에 있는 그림을 보며 설명하자면 개발자가 Insert
, Update
, Delete
등의 데이터 변경 Query를 트랜잭션 단위에서 실행하였을 때 변경의 대상을 메모리 상으로 clone을 한다.
이 후 변경 사항을 메모리 상에 clone 된 Data에 적용을 한 후 변경한 후 변경 사항을 가지고 있다가 commit
이 되면 그 때 DB에 변경사항이 적용 되는 것이다.
만약 트랜잭션이 실행되는 도중 Error
가 발생하게 되면 메모리에 있던 변경사항을 메모리에서 지우는데 이 행위를 Rollback
이라고 한다.