티스토리 뷰

트랜잭션

  • DB에서 데이터의 일관성과 무결성을 보장
  • 하나의 그룹으로 처리되어야 하는 명령어를 모아놓은 작업 단위
    e.g) 하나의 그룹이 4개의 SQL문으로 이루어졌을 경우, 4개의 SQL문이 완전히 처리가 되거나 아니면 하나도 수행이 되지 말아야함(All-OR-Nothing)
  • 일반적으로 Begin_transaction과 End_transaction으로 나뉘어 트랜잭션 그룹 내에서 처리해야할 명령어들을 기술

 

 

트랜잭션 단위

  • 장애 발생 시 복구 작업을 할 때 사용
  • 병행 제어 시 논리 작업 단위로 사용
  • 데이터베이스의 일관성과 무결성을 유지하기 위해 여러개의 트랜잭션 단위를 잘 정의해두어야함!

 

 

트랜잭션 예시

A가 B에게 100,000원을 이체하는 경우 하나의 트랙잰션에 들어가는 4개의 SQL문을 정의

  1. Select - A계좌 잔액 검색, B계좌 잔액 검색
  2. Update - A계좌에서 100,000원 인출
  3. Update - B계좌에 100,000원 입금
  4. Select - A계좌 잔액 검색, B계좌 잔액 검색

 

1,2 번까지 잘 수행되었다가 3번작업에서 중단되었다면

👉 2번까지의 모든 작업을 취소하고 트랙잰션 작업 전 데이터베이스의 상태로 돌아감

 

 

 

트랜잭션 명령어

  • COMMIT
  • SAVEPOINT
  • ROLLBACK

 

COMMIT

  • 모든작업을 정상적으로 처리하겠다고 확정하는 명령어
  • 트랜잭션 작업 내용(INSERT, UPDATE, DELETE)을 데이터베이스에 반영(변경된 내용을 영구 저장)
  • COMMIT을 수행하면 하나의 트랜잭션 과정을 종료하게됨
  • 모든 사용자가 변경한 결과를 보게 됨
  • DDL과 DCL 명령문이 수행된 경우 자동 COMMIT됨


ROLLBACK

  • 작업 중 문제가 발생했을때, 트랜잭션 처리 과정에서 발생한 변경 사항을 모두 취소하고, 트랜잭션을 종료
  • 하나의 묶음(트랜잭션)처리가 시작되기 이전 상태로 되돌아감
  • 이전 COMMIT 한 곳 까지만 복구
  • 문제가 발생하면 논리적인 작업의 단위를 모두 취소
  • 비정상적으로 컴퓨터가 종료된경우 자동 ROLLBACK됨

 

장점

  • 데이터 무결성을 보장
  • 영구적으로 변경하기 전에 데이터의 변경사항을 확인할 수 있음
  • 연관된 작업(SQL문)을 논리적으로 그룹화

 


출처

 

Comments