데이터베이스의 상태를 변화시키기 위해서 수행하는 작업단위를 뜻 한다.
데이터베이스 상태를 변화시킨다는건 예를 들자면 이런 것들이 있다.
다음과 같은 SQLquery들은 데이터베이스의 상태를 변화시킨다.
주의해야할 점은 작업의 단위가 꼭 쿼리 한 문장은 아니라는 점이다.
주의 : 1작업 != 1쿼리
작업 단위는 여러가지의 쿼리묶음을 사람이 정하는 기준에 따라 정해진다.
즉, 작업 단위는 정해진 쿼리의 갯수가 없다. 100개가 넘는 쿼리가 있더라도 한 트랜잭션이라고 정의할 수 있는 것이다.
그리고 트랜잭션은 다음과 같이 네 가지 요소를 반드시 포함하게 된다.
첫째. 원자성(Atomicity)
트랜잭션이 DB에 모두 반영되던가, 전혀 반영되지 않아야 한다.
예를 들어 비행기 티켓팅이란 트랜잭션은 요금의 지불과 항공티켓의 발송이 모두 이뤄져야 한다. 요금의 지불에서 트랜잭션 실행이 멈춘다면, 클라이언트는 돈만 날리고 항공티켓은 받지 못하게 된다. 이러한 불상사를 방지하기 위해 트랜잭션은 All or Nothing이라는 더 이상 쪼갤수 없는 원자성을 갖게된다.
둘째. 일관성(Consistency)
트랜잭션이 진행되는 동안에 데이터가 변경되더라도 업데이트된 데이터로 트랜잭션이 진행되는것이 아니라, 처음에 트랜잭션을 진행하기 위해 참조한 데이터로 진행된다.
셋째. 독립성(Isolation)
둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다.
하나의 특정 트랜잭션이 완료될 때 까지는, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조 할 수 없다.
넷째. 지속성(Durability)
트랜잭션이 성공적으로 완료되었을 경우, 결과는 영구적으로 반영되어야 한다.