10. 트랜잭션 BEGIN , COMMIT, ROLLBACK

sir.YOO_HWAN·2022년 2월 26일
1

SQL

목록 보기
10/31

📌 트랜잭션

  • ‘트랜잭션’이란 '거래'라는 뜻으로 데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위이다.
  • 여러 단계의 처리를 하나의 처리처럼 다루는 기능
    • 여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료된다.
    • 하나의 명령어라도 잘못되면 전체 취소된다.
      • 트랜잭션을 쓰는 이유는 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함

❤️ 참고

  • POSTGRESQL 은 DDL(data definition language : 데이터 조작어)도 커밋을 해야한다!
  • 오라클은 DDL은 커밋을 할 필요가 없다.

📌 트랜잭션 필요성

(출처 : https://jerryjerryjerry.tistory.com/48)

1. 트랜잭션은 '거래'라는 뜻으로, 은행에서 입금과 출금을 하는 그 거래를 뜻한다.
2. A 은행에서 출금하여 B은행으로 송금한다고 가정하자.
3. 송금하는 중에 알 수 없는 오류가 발생하여 A은행 계좌에서 돈이 빠져 나갔는데 B은행 계좌에 입금되지 않았다.
4. 이때, 우리는 A은행 계좌의 출금을 취소하거나, 출금된 금액만큼 B은행 계좌로 다시 송금하면 된다.
5. 하지만 이 방법은 번거롭고 더 심한 오류를 발생시킬수 있다.
6. 그래서 생각해낸 해결책이, 거래가 성공적으로 모두 끝난 후에야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 아예 처음부터 없었던 거래로 되돌리는 것이다.
7. 이렇게 거래의 안전성을 확보하는 방법이 트랜잭션이다.
8. Database에선 테이블에서 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는데 처리 도중 오류가 발생하면 모든 작업을 원상태로 되돌린다.
9. 데이터베이스에선 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영한다.

📌 트랜잭션의 종류

  • 트랜잭션에는 내가 적은 쿼리문과 데이터를 최종적으로 데이터베이스에 반영하는 COMMIT과 실패했을때 COMMINT 시점으로 다시 되돌아가는 ROLLBACK이 있다.
    1. 활동 : 트랜잭션이 실행 중에 있는 상태, 연산들이 정상적으로 실행 중인 상태
    2. 실패 : 트랜잭션이 실행에 오류가 발생하여 중단된 상태
    3. 철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태
    4. 부분적 완료 : COMMIT 연산이 실행되기 직전의 상태로 아직 작성한 것들을 저장하지 않은 상태
    5. 완료 : 트랜잭션이 성공적으로 종료되어 COMMIT 연산을 실행한 후의 상태

COMMIT

  • 완전 저장
  • COMMIT이란 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로 처리과정을 DB에 영구 저장하는 것이다.
  • COMMIT을 수행하면 하나의 트랜잭션 과정을 종료하는 것이다.
  • COMMIT을 수행하면 이전 데이터가 완전히 UPDATE 된다.

  • 위 그림에서 첫번째 COMMIT후 그 뒤에 UPDATE 문으로 데이터를 갱신하고(3), DELETE문으로 데이터를 삭제하고(4), INSERT 문을 사용해 데이터를 삽입(5)한다.
  • 만약 이 모든 과정이 오류 없이 수행되었다면 지금까지 실행한 모든 작업(3,4,5)을 데이터베이스에 영구 저장하라는 명령으로 COMMIT을 수행한다.

ROLLBACK

  • ROLLBACK은 작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어 이다.
    - 트랜잭션이 시작되기 이전의 상태로 되돌린다.
    - 즉, 마지막 COMMIT을 완료한 시점으로 다시 돌아간다.
    - COMMIT하여 저장한 것만 복구한다.

  • 위 그림에서 ROLLBACK 명령은 마지막으로 수행한 COMMIT 명령까지만 청상처리(1,2)된 상태로 유지한다.
  • 그 이후에 수행했던 모든 DML 명령어 작업(3,4,5)들을 취소시켜 이전 상태로 원상 복귀 시킨다.
  • 트랜잭션은 이렇든 ALL-OR-Nothing 방식으로 DML 명령어들을 처리한다.
  • ALL-OR-Nothing이란 '모든것을 수행하던지 아무것도 하지말던지'라는 의미이다.
profile
data analyst

0개의 댓글