본문 바로가기

[DB]DataBase/[SQL]

[SQLD] 트랜잭션

728x90
반응형

트랜잭션(Transaction) 의미

  • 하나의 연속적인 업무 단위
  • 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
  • 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있음
    • DML 명령어의 작업 단위

예) A 고객이 B 고객에게 100만원을 계좌이체한다.

  1. A 고객의 계좌 잔액이 100만원 이상인지 확인
  2. 맞다면 A 고객 계좌 잔액 -100 (UPDATE)
  3. B 고객 계좌 잔액 +100 (UPDATE)

이때 2, 3번이 동시에 수행되어야 하고, 모두 성공하거나 모두 실패해야 한다. (All or Nothing)

이러한 업무 특성의 연속적인 단위를 트랜잭션이라고 한다.

주의점

  • 각 업무가 서로 독립적으로 발생하면 안됨
    • 각각의 INSERT문으로 동작하면 안됨
  • 부분 COMMIT 불가
    • 동시 COMMIT 또는 ROLLBACK 처리

트랜잭션 4가지 특성

  1. Atom(원자성, All or Nothing)
    1. 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되거나 전혀 실행되지 않은 상태로 남아있어야 한다.
  2. Consistency(일관성)
    1. 트랜잭션이 실행되기 전에 데이터베이스 내용이 잘못되어 있지 않다면, 실행된 이후에도 데이터베이스 내용에 잘못된 부분이 없어야 한다.
  3. Isolation(독립성, 고립성, 격리성)
    1. 트랜잭션이 실행되는 도중에 다른 트랜잭션에 영향을 받아 잘못된 결과를 만들어서는 안된다.
  4. Durability(지속성)
    1. 트랜잭션이 성공적으로 수행되면 해당 트랜잭션이 갱신한 데이터베이스 내용은 영구적으로 저장된다.

Isolation이 낮은 경우 발생되는 문제점

  • Dirty Read
    • 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽음
  • Non-Repeatable Read
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정/삭제 하여 두 쿼리의 결과가 다르게 제공되는 현상
  • Phantom Read
    • 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는 데, 그 사이에 다른 트랜잭션이 값을 추가하여 첫 번째 쿼리 결과에 없던 레코드가 두 번째 쿼리에서 제공되는 현상

필수적, 선택적 관계와 ERD

  • 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
  • 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현

SQL문

  • begin transaction(begin tran)
    • 새로운 트랜잭션 생성
  • commit(commit transaction)
    • 현재 트랜잭션을 적용하고 종료
  • rollback(rollback transaction)
    • 최초의 begin transaction 시점까지 모두 롤백하고 종료
  • save transaction
    • Savepoint(저장점)을 정의해서 특정 지점까지의 롤백이 가능하게 함
    • -- [SQL Server]
      -- 트랜잭션 시작
      begin transaction;
      
      -- sp1 저장점 설정
      save transaction sp1;
      update ...;
      
      -- sp2 저장점 설정
      save transaction sp2;
      delete ...;
      
      -- sp2 저장점 롤백 (delete 롤백됨)
      rollback transaction sp2;
      
      -- 커밋 (트랜잭션 종료)
      commit;
반응형

'[DB]DataBase > [SQL]' 카테고리의 다른 글

[SQLD] 본질 식별자 vs. 인조식별자  (0) 2024.03.06
[SQLD] Null 속성  (0) 2024.03.04
[SQLD] 관계와 조인  (0) 2024.03.02
[SQLD] 정규화(Normalization)  (0) 2024.03.01
[SQLD] 데이터 모델링 요소-4)식별자(Identifier)  (0) 2024.02.27