직접 해보기/SQL
[SQL TCL] 트랜잭션Transaction, 실행Commit, 취소Rollback, 임시저장Savepoint
서윤L
2024. 8. 8. 00:49
728x90
반응형
0️⃣ TCL (Transaction Control Language, 트랜잭션 제어어)
- 트랜잭션 제어어는 DML 명령어를 실행(Commit), 취소(Rollback), 임시저장(Savepoint)할 때 사용하는 명령어입니다.
- 여기서 트랜잭션(Transaction)이란, SQL 명령어들로 이루어진 논리적인 작업단위입니다.
이때 명령어들은 위에서 언급했듯이 INSERT, SELECT, UPDATE, DELETE와 같은 DML 명령어들로 이루어져 있습니다.
또한 트랜잭션은 더 분할할 수 없는 최소의 작업단위입니다.
실행 | 취소 | 임시저장 |
COMMIT | ROLLBACK | SAVEPOINT |
- 모든 작업을 최종 실행함 - 변경된 데이터를 테이블에 영구 반영함 |
- 모든 작업을 되돌림=취소함 - 따라서 데이터 변경 이전 상태로 복구됨 |
- ROLLBACK 지정점을 정함 - 현시점에서 임시저장점까지 트랜잭션 일부만 취소할 수 있게 해줌 |
1️⃣ 트랜잭션 취소 :: ROLLBACK
- 트랜잭션의 시작은 아래와 같이 BEGIN 명령어로 선언합니다.
- 트랜잭션을 취소 = BEGIN 아래에 포함된 모든 작업/명령어들을 취소하고 되돌리려면, ROLLBACK 명령어를 사용합니다.
트랜잭션 시작하고 테이블에 데이터 추가 |
![]() |
트랜잭션 취소(ROLLBACK) 해서 추가했던 데이터 제거됨 |
![]() |
2️⃣ 트랜잭션 실행 :: COMMIT
- 트랜잭션을 실행 = BEGIN 아래에 포함된 모든 작업/명령어들을 실행하고 결과를 반영하려면, COMMIT 명령어를 사용합니다.
트랜잭션 시작하고 테이블에 데이터 추가 |
![]() |
트랜잭션 실행(COMMIT) 해서 데이터 추가 반영됨 |
![]() |
3️⃣ 임시저장 :: SAVEPOINT
- SAVEPOINT 명령을 사용하여, 트랜잭션 중간중간에 임시저장점을 만들 수 있습니다.
- 임시저장점을 만들면 트랜잭션 전체를 취소(ROLLBACK)하지 않고,현 시점에서 임시저장점까지의 일부만 취소할 수 있습니다.
- 다만, 임시저장점이 여러개인 경우!
한번 과거의 저장점으로 취소(ROLLBACK)하고 난 뒤엔, 그 이후 시점의 저장점으로 취소할 수 없게 됩니다.
다시 말해서, 특정 저장점까지 취소하면 그 이후의 저장점들은 무효가 된다는 점.. 유의해야 합니다. - 아래 예시를 보면, S2로 한번 롤백하고 나니 S3로 롤백할 수 없게 되었습니다.
트랜잭션 시작 → 데이터 삽입하고 임시저장점 S1 → 데이터 수정하고 S2 → 데이터 삭제하고 S3 |
![]() |
S2 지점으로 롤백 | ![]() |
이후 S3 지점은 무효가 되어 롤백 불가능 |
![]() |
S1 지점은 S2 이전이므로 롤백 가능 |
![]() |
참고1: boostcourse 강좌 (기초 데이터 분석을 위한 핵심 SQL)
728x90
반응형