데이터베이스에서 완전하게 실행되거나, 또는 아예 실행되지 말아야하는 하나의 쿼리 또는 연관된 쿼리 집합을 트랜잭션이라고 합니다.
트랜잭션의 성공 여부와 관계없이 테이터베이스는 항상 일관성을 유지하는 상태가 됩니다. 즉, 하나의 트랜잭션을 처리하는 하나 이상의 쿼리가 완전하게 실행에 성공하거나(이후 Commit), 또는 그 중 어느 하나라도 정상적으로 처리가 되지 않으면 해당 트랜잭션을 처리하는 모든 쿼리의 실행을 취소(Rollback)하여 데이터베이스를 트랜잭션 수행 전의 상태로 되돌립니다.
트랜잭션의 연산으로는 크게 'Commit'과 'Rollback' 두 가지가 있습니다.
트랜잭션이 데이터베이스에 영구히 수록된 것을 Commit되었다고 합니다. 반면에 데이터베이스에 수록되지 않은 것을 Rollback되었다고 하는데, 이 경우 데이터베이스는 트랜잭션이 시작되기 전의 상태로 재설정됩니다.
트랜잭션을 처리하기 위해서 'ACID'를 지켜야 합니다.
ACID란 트랜잭션이 충족시켜야 하는 네 가지 요구사항을 말합니다.
- Atomicity(원자성): 하나의 트랜잭션은 더 이상 분리할 수 없는 작업 단위가 되어야 한다(트랜잭션의 전체 작업이 완전히 성공적으로 실행되던가 아니면 일체 실행되지 않아야 함).
- Consistency(일관성): 트랜잭션은 데이터베이스가 일관성있는 상태가 되도록 해야 한다.
- Isolation(고립성): 실행이 완전히 끝나지 않은 트랜잭션은 데이터베이스의 다른 트랜잭션에 영향을 주지 않아야 한다(트랜잭션이 완전히 성공 또는 실패로 끝날 때까지는 분리되어 있어야 함).
- Durability(영속성): 데이터베이스에 수록되면 트랜잭션은 영구적으로 보존되어야 한다.
트랜잭션은 논리적으로 5가지 상태에 있을 수 있습니다.
- Active(활동): 트랜잭션이 실행 중인 상태
- Failed(실패): 트랜잭션 실행에 오류가 발생하여 중단된 상태
- Aborted(철회): 트랜잭션이 비정상적으로 종료되어 Rollback을 수행한 상태
- Partially Committed(부분 완료): 트랜잭션의 마지막 연산까지 실행했지만, Commit이 실행되기 직전의 상태
- Committed(완료): 트랜잭션이 성공적으로 종료되어 Commit을 실행한 후의 상태
참고 블로그: [데이터베이스] Transaction, 트랜잭션이란?