본문 바로가기

DB

트랜잭션(Transaction)

트랜잭션(Transaction)

데이터베이스의 상태를 변화(SELECT, UPDATE, INSERT, DELETE)시키기 위해 수행하는 작업 단위

 

ACID 속성

  • 원자성(Atomicity): 트랜잭션 내의 모든 연산은 전부 성공하거나 전부 실패
  • 일관성(Consistency): 트랜잭션이 성공하면, 데이터베이스의 규칙과 제약을 만족하는 일관된 상태로 변화
  • 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로의 연산에 영향을 주지 않음
  • 지속성(Durability): 트랜잭션이 성공하면, 그 결과는 시스템에 영구적으로 반응

연산

  • Commit: 트랜잭션 동안 수행된 모든 연산이 성공적으로 완료되었고 일관성을 유지했다고 알리는 연산
  • Rollback: 트랜잭션 내에서 수행된 모든 연산을 취소하고, 데이터베이스를 트랜잭션 시작 이전의 상태로 되돌림

상태

  • Active: 트랜잭션이 실행 중인 상태
  • Failed: 트랜잭션이 오류가 발생해서 중단된 상태
  • Aborted: 랜잭션이 실패하여 Rollback 이 수행된 상태
  • Partially Committed: 트랜잭션이 성공하고 Commit이 되기 직전 상태
  • Committed: 트랜잭션이 성공적하고 Commit 연산을 실행한 후의 상태

읽기 현상

  • Dirty read: 한 트랜잭션에서 변경한 데이터를 다른 트랜잭션이 읽었는데 롤백되는 경우
  • Non-repeatable Reads: 트랜잭션 내에서 동일한 쿼리를 두 번 실행했을 때 다른 결과를 얻음
  • Phantom Reads: 한 트랜잭션 내에서 같은 쿼리를 실행했을 때, 처음 쿼리를 실행한 후 다른 트랜잭션이 새로운 데이터를 삽입하면, 두 번째 쿼리 결과에는 이전에 없던 새로운 데이터가 포함

격리 수준(isolation level)

  • READ UNCOMMITTED: 아직 Commit이 이루어지지 않은 변경 내용을 다른 트랜잭션이 읽는 것을 허용
  • READ COMMITTED: Commit이 이루어진 변경 내용만 조회 가능
  • REPEATABLE READ: 트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회 가능
  • SERIALIZABLE:  트랜잭션을 순차적으로 진행
  Dirty Read Non-Repeatable Read Phantom Read
READ UNCOMMITED O O O
READ COMMITTED X O O
REPEATABLE READ X X O
SERIALIZABLE X X X

 

'DB' 카테고리의 다른 글

저장 프로시저  (0) 2024.03.01
SQL injection  (1) 2024.02.26
인덱스(Index)  (2) 2024.02.24
정규화(Normalization)  (2) 2024.02.24
SQL vs NoSQL  (1) 2024.02.15