TCL과 트랜잭션
쉽게 말하면
트랜잭션은 '다 되거나 아예 안 되거나' 해야 하는 작업 묶음이고, TCL은 그 묶음을 확정하거나 취소하는 명령이에요. COMMIT은 저장, ROLLBACK은 마지막 저장으로 되돌리기, SAVEPOINT는 중간 체크포인트예요. 게임의 저장과 불러오기를 떠올리면 쉬워요.
시험용 정의
트랜잭션은 "전부 성공하거나 전부 취소"되어야 하는 작업 단위이고, TCL(Transaction Control Language)은 그것을 확정·취소하는 명령이다. COMMIT(확정), ROLLBACK(마지막 COMMIT 이후 변경 취소), SAVEPOINT(중간 저장점, ROLLBACK TO로 거기까지만 취소). 트랜잭션은 원자성·일관성·고립성·지속성(ACID)을 지켜야 한다.
비유로 이해하기
게임 저장이다. COMMIT은 세이브 파일에 저장, ROLLBACK은 마지막 세이브로 돌아가기, SAVEPOINT는 보스 방 앞 임시 체크포인트. 보스전(DDL)에 들어가면 게임이 자동 저장해 버려서 그 전으로는 못 돌아간다.
자세히
그림으로 보기: SAVEPOINT와 ROLLBACK TO
- INSERT행 하나 추가
- SAVEPOINT A여기에 저장점
- UPDATE값 변경
- ROLLBACK TO AUPDATE만 취소, INSERT는 남음
- COMMITINSERT를 확정
먼저 알아 둘 말
| 말 | 뜻 |
|---|---|
| 트랜잭션 | 하나의 논리적 작업 단위. 이체의 출금과 입금처럼 함께 성공해야 하는 묶음 |
| 자동 커밋(AUTO COMMIT) | 문장 하나가 끝날 때마다 자동으로 COMMIT되는 방식. SQL Server 기본값 |
| 잠금(LOCK) | 트랜잭션이 고치는 행을 다른 트랜잭션이 동시에 고치지 못하게 막는 것 |
ACID
| 특성 | 뜻 |
|---|---|
| 원자성(Atomicity) | 모두 실행되거나 하나도 실행되지 않는다 (All or Nothing) |
| 일관성(Consistency) | 실행 전후 데이터베이스가 규칙(제약조건)에 맞는 상태다 |
| 고립성(Isolation) | 실행 중인 트랜잭션의 중간 결과를 다른 트랜잭션이 볼 수 없다 |
| 지속성(Durability) | COMMIT된 결과는 장애가 나도 영구히 남는다 |
명령과 동작
| 명령 | 동작 |
|---|---|
| COMMIT | 변경 확정. 잠금이 풀리고 다른 사용자도 변경을 본다. 이후 ROLLBACK으로 되돌릴 수 없다 |
| ROLLBACK | 마지막 COMMIT 이후의 변경을 모두 취소, 저장점도 사라진다 |
| SAVEPOINT sp | 저장점 표시. 같은 이름으로 다시 만들면 뒤의 것이 앞의 것을 덮는다 |
| ROLLBACK TO sp | sp 이후의 변경만 취소. 트랜잭션은 계속된다(sp 이전 변경은 아직 미확정) |
Oracle vs SQL Server
| 구분 | Oracle | SQL Server |
|---|---|---|
| DML 커밋 | 직접 COMMIT해야 한다 (기본) | 기본이 AUTO COMMIT. 묶으려면 BEGIN TRANSACTION |
| DDL | 실행 전후 자동 COMMIT | 트랜잭션 안에서 실행하면 ROLLBACK 가능 |
| 저장점 | SAVEPOINT sp / ROLLBACK TO sp | SAVE TRANSACTION sp / ROLLBACK TRANSACTION sp |
시험에 이렇게 나와요
- SAVEPOINT·ROLLBACK TO·COMMIT이 섞인 시나리오에서 최종 결과 행 고르기
- Oracle DDL 자동 커밋 함정
- ACID 네 가지 특성 정의
- Oracle(수동 COMMIT) vs SQL Server(AUTO COMMIT, BEGIN TRANSACTION)
- 같은 이름 SAVEPOINT를 다시 만들면 나중 것만 유효
출제 범위·공식 안내 기반
확인 문제
Q1. Oracle에서 INSERT → CREATE TABLE → ROLLBACK 순서로 실행했다. INSERT한 행은?
- INSERT도 CREATE도 모두 취소된다
- CREATE TABLE이 오류가 난다
- 남아 있다
- ROLLBACK으로 사라진다
정답 보기
3번 남아 있다
Oracle에서 DDL(CREATE·ALTER·DROP·TRUNCATE)은 실행 전후로 자동 COMMIT된다. CREATE TABLE 때 앞의 INSERT까지 확정되어 ROLLBACK해도 남는다.
Q2. 다음을 차례로 실행한 뒤 남는 부서는? INSERT 50 → SAVEPOINT a → INSERT 60 → SAVEPOINT b → INSERT 70 → ROLLBACK TO a → INSERT 80 → COMMIT
- 80
- 50, 80
- 50, 60, 80
- 50, 60, 70, 80
정답 보기
2번 50, 80
ROLLBACK TO a로 60·70이 취소되고, 이후 80을 넣어 COMMIT. 50과 80이 확정된다.
Q3. 트랜잭션이 실행 중일 때 그 중간 결과를 다른 트랜잭션이 볼 수 없다는 특성은?
- 지속성
- 일관성
- 고립성
- 원자성
정답 보기
3번 고립성
고립성(Isolation)이다. 원자성은 전부 되거나 전부 취소, 일관성은 규칙을 지킨 상태 유지, 지속성은 커밋된 결과가 사라지지 않는 성질이다.
Q4. SQL Server에 대한 설명으로 옳은 것은?
- 기본이 AUTO COMMIT이라 여러 문장을 묶으려면 BEGIN TRANSACTION을 쓴다
- DML은 항상 직접 COMMIT해야 한다
- SAVEPOINT 명령을 쓴다
- DDL은 ROLLBACK할 수 없다
정답 보기
1번 기본이 AUTO COMMIT이라 여러 문장을 묶으려면 BEGIN TRANSACTION을 쓴다
SQL Server 기본은 AUTO COMMIT. 저장점은 SAVE TRANSACTION.
Q5. Oracle에서 INSERT를 한 뒤 CREATE TABLE을 실행하고 ROLLBACK 하면 앞의 INSERT는?
- 반만 남는다
- 취소된다
- 오류가 난다
- 커밋되어 남는다
정답 보기
4번 커밋되어 남는다
Oracle에서 DDL은 실행 전에 자동 커밋한다.
Q6. ACID 중 커밋된 결과는 장애가 나도 사라지지 않는다는 특성은?
- 원자성
- 고립성
- 일관성
- 지속성
정답 보기
4번 지속성
지속성(Durability)이다. 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation)과 함께 ACID를 이룬다.
헷갈리기 쉬운 O·X
ROLLBACK TO 저장점을 실행하면 트랜잭션 전체가 끝난다.
정답 보기
X 저장점 이후만 취소되고 트랜잭션은 이어진다.
COMMIT된 데이터는 장애가 나도 남아야 한다는 것이 지속성이다.
정답 보기
O Durability.
Oracle에서 TRUNCATE TABLE 후 ROLLBACK하면 데이터가 돌아온다.
정답 보기
X TRUNCATE는 DDL이라 자동 COMMIT된다.