쿼리 수행 순서
- row lock (MySQL InnoDB의 경우)
- UNDO SEGMENT Buffer에 현재 데이터를 기록
- UPDATE
- 다른 트랜잭션에서 조회하는 경우 UNDO Buffer의 데이터를 조회
- 아직 커밋 전이므로 이전 상태의 데이터를 응답해준다
- Commit, row unlock
특징
Atomicity (원자성)
- 같은 트랜잭션 내의 작업들은 하나로 간주해, 모두 성공하거나 모두 실패해야함
Consistency (일관성)
- 트랜잭션의 처리 결과는 항상 일관되어야 함
- 트랜잭션 도중에 DB의 상태가 바뀌어도, 바뀌기 전 DB를 기준으로 진행되어야함
Isolation (독립성)
- 서로 다른 트랜잭션끼리 간섭되어선 안됨. 연산에 끼어들거나, 참조할 수 없음
Durability (지속성)
- 트랜잭션이 성공 완료되면, 결과가 반영되어야 함
Commit, Rollback
Commit
- 하나의 트랜잭션이 성공적으로 완료되어 DB가 다시 일관성 있는 상태가 됨. 트랜잭션 관리자가 수행한 작업들을 반영하도록 하는 연산
Rollback
- 하나의 트랜잭션이 비정상 종료되어 행한 모든 연산을 취소하는 연산
상태
Active
Failed
Aborted
- 비정상 종료되어 Rollback 연산을 수행한 상태
Partially Committed
- 트랜잭션의 모든 연산이 실행되었고, Commit 연산이 수행되기 직전 상태
Committed
- 성공적으로 완료되어, Commit 연산을 수행한 상태