트랜잭션
- DB는 여러 사람들이 대규모로 동시 접근함
- 동시성 제어: 동시에 접근 하는 상황에서 일어나는 문제를 없애야 함
- 회복: DB를 사용하던 도중 맛이 가도 일관성을 유지해야 함
- DB에서 하나의 논리적인 단위를 수행하는 DB 연산의 모임
- 운영체제의 인스트럭션과 비슷한 느낌 공유 자원 보호참조
트랜잭션 개요
연산을 수행하다가 종료된 상황1
전체 사원의 봉급을 6% 인상하는 쿼리 수행
UPDATE EMPLOYEE
SET SALARY = SALARY * 1.06;
만약 1000명의 사원이 DB에 저장되어있는데 500명까지 수행하다가 비정상 종료가 된다면? 연산을 어디까지 했는지 로그를 저장
연산을 수행하다가 종료된 상황2
계좌 이체의 쿼리 수행
UPDATE CUSTOMER
SET BALANCE = BALANCE - 100000
WHERE CUST_NAME = '김철수';
UPDATE CUSTOMER
SET BALANCE = BALANCE + 100000
WHERE CUST_NAME = '이영희';
만약 첫 번째 UPDATE 구문이 수행된 후 두 번째 UPDATE 구문이 수행되기전 시스템이 다운된다면? 100000원 증발 운영체제의 Atomic Instruction처럼 보호

트랜잭션의 ACID 특성
원자성(Atomicity)
- 연산이 완전히 수행되거나 전혀 수행되지 않음(all or nothing)
- 완전히 수행되지 않은 상태에서 다운되었을 때, 이전 상태로 ROLLBACK
- 완전히 수행된 상태면, COMMIT
일관성(Consistency)
- 트랜잭션 수행 전이 일관된 상태라면 수행 후에도 일관된 상태를 가짐
- 트랜잭션 수행 도중은 일시적으로 일관된 상태를 갖지 않을 수도 있음
고립성(Isolation)
- 트랜잭션이 수행 중일 땐 다른 트랜잭션이 접근하지 못함
- 여러 트랜잭션이 동시에 수행되더라도, 순서대로 실행한 결과와 같아야 함
지속성(Durability)
- 트랜잭션이 완료되면 이 후 고장이 발생하더라도 손실되지 않음
- 완료된 트랜잭션의 결과는 시스템이 다운되도 반영됨
완료와 철회
Commit
- 트랜잭션에서 변경하려는 내용이 DB에 완전하게 반영됨
- SQL 구문상으로 COMMIT WORK
Abort
- 트랜잭션에서 변경하려는 내용이 DB에 일부만 반영된 경우 전 상태로 되돌림
- SQL 구문상으로 ROLLBACK WORK