목차
✅ TCL (Transaction Control Language) – 트랜잭션 제어어
TCL은 말 그대로 트랜잭션을 제어하는 SQL 명령어 모음이다.
즉, 데이터 조작 작업(INSERT, UPDATE, DELETE 등)을 확정(commit)하거나 취소(rollback)하거나, 중간 저장점(savepoint)을 관리할 수 있다.
✅트랜잭션이란?
데이터베이스에서 하나의 논리적 작업 단위로 묶인 연산들을 의미한다.
예를들어 "A 계좌에서 10만 원 출금 → B 계좌로 입금"은 하나의 트랜잭션이다.
출금만 되고 입금이 안되거나 출금은 되지 않았는데 입금이 된다면 상상만해도 끔찍하다..
즉, 출금 → 입금은 반드시 모두 성공하거나, 전부 실패해야 하는 하나의 묶음인 것.
원자성 | 트랜잭션으로 묶인 작업은 모두 성공하거나 모두 실패해야 한다. 하나라도 실패하면 전체 롤백 |
일관성 | 트랜잭션이 완료된 후에는 항상 데이터 무결성이 유지되어야 한다 |
고립성 | 동시에 여러 트랜잭션이 실행되더라도 서로의 실행 결과에 영향을 주지 않아야 한다 |
지속성 | 트랜잭션이 성공적으로 완료되면 그 변경은 영구적으로 저장되어야 한다 |
따라서 트랜잭션은 위의 4가지 특성을 가지고 있다.
COMMIT - 변경사항을 영구 저장
INSERT, DELETE, UPDATE 후 변경된 내용을 확정 저장할 때 사용하는 TCL이다.
COMMIT을 실행하지 않으면 변경 사항은 임시 상태(메모리)에만 존재하며, 다른 사용자에게는 보이지 않고 ROLLBACK으로 취소도 가능하다. 하지만 COMMIT을 실행하는 순간, 변경 사항은 데이터베이스에 완전히 반영되고, 다시는 취소할 수 없다.
UPDATE students SET score = 100 WHERE name = '지수';
COMMIT;
설명:
- 트랜잭션에서 실행된 변경 내용을 데이터베이스에 확정 저장한다.
- COMMIT을 실행하면 이후 ROLLBACK으로 복구할 수 없다.
- 예를 들어 은행 시스템에서 출금 후 입금까지 성공했을 때 COMMIT함.
ROLLBACK - 변경사항 취소 (되돌리기)
ROLLBACK은 COMMIT 전까지 수행된 모든 변경 작업을 취소할 때 사용하는 명령어이다.
실수로 데이터를 삭제하거나 잘못 수정했을 경우 트랜잭션 단위로 되돌릴 수 있어 유용하다.
DELETE FROM students
WHERE score < 60;
ROLLBACK;
설명:
- COMMIT 전이면 전체 변경 작업을 취소하고 원래 상태로 되돌림
- 실수한 UPDATE/DELETE를 되돌릴 때 유용
- 자동으로 실행되지 않으며, 명시적으로 호출해야 함
SAVEPOINT - 중간 저장점 설정
트랜잭션 도중 특정 시점까지는 살리고, 이후 작업만 취소하고 싶을 때 사용하는 명령어다.
SAVEPOINT를 사용하면 부분적으로 되돌리는 ROLLBACK이 가능하다.
SAVEPOINT sp1;
UPDATE students
SET score = 95
WHERE name = '지수';
DELETE FROM students
WHERE score < 80;
설명:
- SAVEPOINT sp1은 현재까지의 상태를 저장함
- 이후 작업이 잘못되었을 경우, 해당 저장점까지만 ROLLBACK 가능
ROLLBACK TO - 저장점으로 부분 취소
ROLLBACK TO 저장점은 전체 작업이 아닌, 지정한 저장점 이후 작업만 되돌릴 수 있는 명령어이다.
복잡한 트랜잭션에서 실수한 부분만 취소하고 나머지는 유지하고 싶을 때 유용하다.
ROLLBACK TO sp1;
설명:
- 저장점 sp1 이후의 모든 작업만 취소되고,
sp1 이전 작업은 그대로 유지됨 - 부분 ROLLBACK을 통해 세밀한 트랜잭션 제어 가능