Transaction
BEGIN;
UPDATE users SET point = point - 1000 WHERE id = 1;
INSERT INTO orders (user_id, amount) VALUES (1, 1000);
UPDATE products SET stock = stock - 1 WHERE id = 99;
COMMIT;
Atomic
- Transaction 내의 쿼리들이 모두 중간만 반영되지 않고 원자단위로 이루어짐
- 전부 롤백 or 완성
Consistency
Isolation
- 동시에 수행되는 트랜잭션은 서로 간섭 없이 독립적으로 처리
- transaction마다 lock을 거는게 아니라 row별로 걸어서 동시에 처리해도 문제없게
격리 단계 Read Uncommitted 커밋 안 된 데이터도 읽음 Dirty Read 가능 Read Committed 커밋된 데이터만 읽음 Non-repeatable Read 가능 → postgres Repeatable Read 트랜잭션 동안 같은 쿼리는 동일 결과 보장 Phantom Read 가능 → InnoDB Serializable 가장 강력, 트랜잭션 간 완전 순차적 실행 없음 (성능↓)
Durability
처리 순서
- Undo에 이전 값 저장
- Redo에 변경 내용 기록
- 메모리에서 변경
- 커밋
- 나중에 실제 디스크 반영 (flush)