직접 해보기/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)

참고2: https://buly.kr/HSVcpdQ

728x90
반응형