트랜잭션
데이터베이스 내에서 하나의 논리적 기능을 수행하는 작업의 단위이며, 하나 이상의 쿼리로 구성된다.
- 트랜잭션이 오류없이 실행을 마치면 commit을 수행한다.
- 트랜잭션 처리 중간에 실행이 중단되었을 경우, Rollback을 수행한다.
즉, 한 번 질의가 실행되면(하나의 트랜잭션이 실행되면) 질의가 모두 수행되거나 모두 수행되지 않는다.
ACID
트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 4가지 특성. 트랜잭션은 ACID를 모두 만족해야 한다.
- Atomic(원자성): 트랜잭션의 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장하는 능력이다. 예를 들어, 자금 이체는 성공할 수도 실패할 수도 있지만 보내는 쪽에서 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안 된다. 원자성은 이와 같이 중간 단계까지 실행되고 실패하는 일이 없도록 하는 것이다.
- Consistency(일관성): 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지하는 것
- Isolation(고립성): 트랜잭션을 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것. 고립성이 높을수록 성능은 떨어진다.
- Durability(지속성): 성공적으로 수행된 트랜잭션은 영원히 반영되어야 함. commit을 하면 현재 상태는 영원히 보장된다. 전형적으로 모든 트랜잭션은 로그로 남고 시스템 장애 발생 전 상태로 되돌릴 수 있다. 트랜잭션은 로그에 모든 것이 저장된 후에만 commit 상태로 간주될 수 있다.
출처: 위키백과
https://ko.wikipedia.org/wiki/ACID
DB 별 commit 방법
- MySQL: auto-commit된다.
- Oracle DB: commit을 직접 해주어야 한다.