[DB] 트랜잭션 (COMMIT, ROLLBACK)
트랜잭션
- 트랜잭션이란 '거래'라는 뜻으로 데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위이다.
- 여러 단계의 처리를 하나의 처리처럼 다루는 기능
->여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료된다.
-> 하나의 명령어라도 잘못되면 전체 취소된다.
- 트랜잭션을 쓰는 이유는 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함.
트랜잭션의 종류
- 트랜잭션에는 내가 적은 쿼리문과 데이터를 최종적으로 데이터베이스에 반영하는 COMMIT과 실패했을 때 COMMIT 시점으로 다시 돌아가는 ROLLBACK이 있다.

- 활동 : 트랜잭션이 실행 중에 있는 상태, 연산들이 정상적으로 실행 중인 상태
- 실패 : 트랜잭션이 실행에 오류가 발생하여 중단된 상태
- 철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태
- 부분적 완료 : COMMIT 연산이 실행되기 직전의 상태로 아직 작성한 것들을 저장하지 않은 상태
- 완료 : 트랜잭션이 성공적으로 종료되어 COMMIT 연산을 실행한 후의 상태
COMMIT
- 모든 작업을 정상처리 하겠다고 확정하는 명령어
- 트랜잭션의 처리과정을 데이터베이스에 반영하기 위해, 변경된 내용을 모두 영구 저장한다.
- COMMIT을 수행하면, 하나의 트랜잭션 과정을 종료하게 된다.
- TRANSACTION(INSERT, UPDATE, DELETE) 작업 내용을 실제 데이터베이스에 저장한다.
- 이전 데이터가 변경된 데이터로 완전히 UPDATE 된다.
- COMMIT 후 모든 사용자가 변경된 데이터의 결과를 볼 수 있다.
- COMMIT 이후 데이터 상태
-> 데이터에 대한 변경 사항이 물리적 디스크에 반영된다.
-> COMMIT 이전 데이터는 복수할 수 없다.
-> 모든 사용자가 변경된 결과를 볼 수 있다.
-> 트랜잭션과 관련된 행의 잠금이 풀리며 다른 사용자들이 조작할 수 있다.
ROLLBACK
- 작업 중 문제 발생 시, 트랜잭션의 처리과정에서 발생한 변경 사항을 취소하고, 트랜잭션 과정을 종료시킨다.
- 트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전 상태로 되돌아간다.
- TRANSACTION(INSERT, UPDATE, DELETE) 작업 내용을 취소한다.
- 이전 COMMIT 한 곳까지만 복구된다.
- ROLLBACK 이후 데이터 상태
-> ROLLBACK 된 DML 문장은 메모리 상의 Buffer에만 영향을 미치기 때문에 복구가 가능하다.
-> 트랜잭션과 관련된 행의 잠금이 풀리게 된다.
[References]