
SQLD TCL COMMIT·ROLLBACK·SAVEPOINT 동작, ROLLBACK TO 결과 추적, 같은 이름 SAVEPOINT, Oracle DDL 암묵적 커밋과 SQL Server 자동 커밋 핵심 정리
DML로 바꾼 데이터를 확정하거나 되돌리는 TCL을 정리할 차례야
61 · 62회에 SAVEPOINT와 ROLLBACK 순서를 따라가 최종 값을 묻는 문제가 나왔어
SQLD 기초이론 정리 시리즈 44탄!!!
과목 : 2과목 SQL 기본 및 활용
세부 영역 : 관리 구문 - TCL
1. TCL 명령어
| 명령어 | 역할 |
| COMMIT | 지금까지의 변경을 DB에 영구 반영, 트랜잭션 종료 |
| ROLLBACK | 마지막 COMMIT 이후 변경을 모두 취소 |
| SAVEPOINT 이름 | 중간 저장점 생성 |
| ROLLBACK TO 이름 | 해당 저장점 이후 변경만 취소 (트랜잭션은 계속) |
SQL Server는 SAVE TRANSACTION 이름 / ROLLBACK TRANSACTION 이름 으로 써
2. COMMIT · ROLLBACK 전후 상태
| 구분 | COMMIT · ROLLBACK 전 | COMMIT 후 |
| 다른 사용자 | 변경 내용을 볼 수 없음 | 변경 내용을 볼 수 있음 |
| 잠금(LOCK) | 변경 중인 행이 잠김 | 잠금 해제 |
| 되돌리기 | ROLLBACK 가능 | ROLLBACK 불가 |
3. SAVEPOINT 따라가기
계좌 잔액 1000에서 시작 (마지막 COMMIT 상태)
| 순서 | 명령 | 잔액 |
| 1 | UPDATE 잔액 = 900 | 900 |
| 2 | SAVEPOINT S1 | 900 |
| 3 | UPDATE 잔액 = 800 | 800 |
| 4 | SAVEPOINT S2 | 800 |
| 5 | UPDATE 잔액 = 700 | 700 |
| 6 | ROLLBACK TO S1 | 900 |
| 7 | COMMIT | 900 확정 |
ROLLBACK TO S1을 하면 S1 이후에 만든 S2도 함께 사라져
61 · 62회 출제 포인트 : SAVEPOINT · ROLLBACK 순서를 따라가 최종 값 구하기
4. 자동 커밋과 암묵적 커밋
| DBMS | 특징 |
| Oracle | DML은 COMMIT해야 확정. DDL(CREATE · ALTER · DROP · TRUNCATE) 실행 시 앞의 작업까지 자동 COMMIT |
| SQL Server | 기본이 AUTO COMMIT (문장마다 자동 확정). BEGIN TRANSACTION으로 명시적 트랜잭션 시작 |
예) Oracle에서 INSERT → CREATE TABLE → ROLLBACK 하면, CREATE TABLE 때 COMMIT이 일어나서 INSERT한 행은 남아 있어
정상 종료 시 Oracle은 COMMIT, 비정상 종료 시 ROLLBACK 처리돼
5. 같은 이름의 SAVEPOINT
| 순서 | 명령 | 잔액 |
| 1 | UPDATE 잔액 = 900 | 900 |
| 2 | SAVEPOINT A | 900 |
| 3 | UPDATE 잔액 = 800 | 800 |
| 4 | SAVEPOINT A (같은 이름) | 800 |
| 5 | UPDATE 잔액 = 700 | 700 |
| 6 | ROLLBACK TO A | 800 (가장 마지막 A로) |
[ 최근 기출 출제 포인트 ]
| 회차 | 출제 포인트 |
| 61회 | SAVEPOINT · ROLLBACK TO 최종 결과 |
| 62회 | DDL 자동 커밋, SQL Server AUTO COMMIT |
[ 자주 묻는 질문 ]
Q. ROLLBACK TO 후에 트랜잭션이 끝나?
A. 아니야! 저장점 이후만 취소되고 트랜잭션은 계속돼. 끝내려면 COMMIT이나 ROLLBACK을 해야 해
Q. TRUNCATE는 왜 ROLLBACK이 안 돼?
A. Oracle에서 TRUNCATE는 DDL이라 실행하는 순간 자동 COMMIT되기 때문이야
[ 시험 포인트 정리 ]
| 키워드 | 핵심 |
| COMMIT | 영구 반영, 잠금 해제 |
| ROLLBACK | 마지막 COMMIT 시점으로 |
| ROLLBACK TO | 저장점 이후만 취소 |
| 같은 이름 SAVEPOINT | 마지막 것으로 이동 |
| Oracle DDL | 자동 COMMIT |
| SQL Server | 기본 AUTO COMMIT |
[ 기출변형문제 ]
※ 60~62회 출제 포인트와 출제기준을 바탕으로 새로 만든 변형문제야
(잔액 1000이 COMMIT된 상태에서 시작, Oracle 기준)
Q1. UPDATE 잔액=900 → SAVEPOINT S1 → UPDATE 잔액=800 → SAVEPOINT S2 → UPDATE 잔액=700 → ROLLBACK TO S1 → COMMIT 후 잔액은?
① 1000
② 900
③ 800
④ 700
Q2. UPDATE 잔액=900 → SAVEPOINT S1 → UPDATE 잔액=800 → ROLLBACK 후 잔액은?
① 1000
② 900
③ 800
④ 오류 발생
Q3. INSERT로 1행 입력 → CREATE TABLE 실행 → ROLLBACK 했을 때 입력한 행은?
① 삭제됨
② 오류 발생
③ 남아 있음
④ 일부만 남음
Q4. UPDATE 잔액=900 → SAVEPOINT A → UPDATE 잔액=800 → SAVEPOINT A → UPDATE 잔액=700 → ROLLBACK TO A 후 잔액은?
① 900
② 700
③ 1000
④ 800
Q5. 다음 중 TCL이 아닌 것은?
① GRANT
② COMMIT
③ ROLLBACK
④ SAVEPOINT
[ 정답 & 해설 ]
| 문항 | 정답 및 해설 |
| Q1 | ② S1 시점(900)으로 돌아간 뒤 COMMIT (61회 출제 포인트) |
| Q2 | ① 저장점 지정 없는 ROLLBACK은 마지막 COMMIT 상태 1000으로 |
| Q3 | ③ CREATE TABLE(DDL) 실행 때 자동 COMMIT돼서 남아 있음 (62회 출제 포인트) |
| Q4 | ④ 같은 이름이면 마지막 SAVEPOINT A(800)로 돌아감 |
| Q5 | ① GRANT는 DCL |
다음 글에서는 테이블 구조를 만드는
[이론 45] DDL
을 CREATE · ALTER · DROP · TRUNCATE로 정리해볼게!
▶ SQLD · AI 자격증 스터디 자료 보러가기 (AI DATA 자격증 스터디 클럽)
SQLD 준비하시는 분들 모두 화이팅입니다~~~~~ ^^