은행 송금 상황을 생각해보세요.
김철수가 이영희에게 10만원 송금
1. 김철수 통장 -10만원 ✅
2. 이영희 통장 +10만원 💀 오류 발생!
이 상태로 끝나면 김철수 돈만 사라지는 대참사 발생!
"이 작업들은 전부 성공하거나, 전부 실패해야 해!" 라고 묶는 것
START TRANSACTION; -- 묶음 시작
UPDATE accounts SET balance = balance - 100000 WHERE name = '김철수';
UPDATE accounts SET balance = balance + 100000 WHERE name = '이영희';
COMMIT; -- 둘 다 성공 → 최종 저장 ✅
ROLLBACK; -- 하나라도 실패 → 전부 없던 일로 ↩️
START TRANSACTION
↓
작업 실행
↓
성공? ───── YES ──→ COMMIT (저장 확정 ✅)
│
└────── NO ──→ ROLLBACK (되돌리기 ↩️)
엑셀 → Ctrl+Z (실행 취소)랑 비슷한데
차이점:
엑셀 = 내가 수동으로 Ctrl+Z 눌러야 함
롤백 = 오류 생기면 자동으로 되돌아감
| 성질 | 의미 | 비유 |
|---|---|---|
| Atomicity (원자성) | 전부 성공 or 전부 실패 | 택배는 보내거나 안 보내거나 |
| Consistency (일관성) | 데이터가 항상 올바른 상태 | 송금 후 총액은 그대로 |
| Isolation (격리성) | 동시 작업이 서로 방해 안 함 | 각자 다른 창구에서 처리 |
| Durability (지속성) | COMMIT 하면 영구 저장 | 저장 후 전원 꺼져도 유지 |
트랜잭션 = 작업을 하나로 묶는 것 롤백 = 묶인 작업 중 하나라도 실패하면 전부 없던 일로 되돌리는 것 ↩️