본문 바로가기
Web Study/DataBase

SQLD - Transaction (트랜잭션)

by 쿠리의일상 2023. 9. 7.

트랜잭션이란?

데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 1개 이상의 데이터베이스 조작

 

트랜잭션의 특징

  1. 원자성 : 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 한다.
  2. 일관성 : 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못 되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안된다.
  3. 고립성/독립성 : 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어선 안된다.
  4. 지속성 : 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.

 

트랜잭션 완료의 의미

  1. 변경사항이 데이터베이스에 반영
  2. 이전 데이터가 영영 사라져버린다.
  3. 모든 사용자는 결과를 볼 수 있다.
  4. 관련 행은 잠금이 풀리고 다른 사용자가 변경 가능하다.

 

트랜잭션에 대한 격리성이 낮은 경우 발생하는 문제점

  1. Dirty Read : 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
  2. Non-Repeatable Read : 한 트랜잭션 내에서 같은 쿼리르 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
  3. Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 2번 수행했을 때 첫번째 쿼리에서 없던 유령 레코드가 두번째 쿼리에서 나타나는 현상

 

커밋/롤백을 실행하지 않아도 자동으로 트랜잭션이 종료되는 경우

  1. Create, Alter, Drop, Rename, Truncate table 등의 DDL 언어를 수행 시 전후 시점에 자동 커밋
  2. DML 문장 이후 커밋 없이 DDL 문장이 실행되면 자동 커밋
  3. 데이터베이스를 정상적으로 접속 종료하면 자동 커밋
  4. 애플리케이션의 이상 종료로 데이터베이스와의 접속이 단절되었을 때 트랜지션이 자동 롤백

 

트랜잭션 정리

  • 데이터의 변경을 발생시키는 DML 언어 수행 시 데이터의 무결성을 보장하는 것이 커밋과 롤백의 목적

 

  • 커밋은 변경된 데이터를 테이블이 영구적으로 반영한다는 의미
  • 롤백은 변경 사항을 취소하고 변경 이전의 데이터로 복구하라는 의미
  • Savepoint 는 데이터 변경을 사전에 지정한 저장점까지만 롤백하라는 의미

 

  • 트랜잭션은 대상이 되는 SQL문을 실행하면 자동으로 시작하고 커밋 또는 롤백을 실행한 시점에 종료된다.
  • 항상 전체를 통합하여 분석 처리하는데 슈퍼-서브타입이 하나의 테이블로 통합되어 있으면 하나의 테이블에 집적된 데이터만 읽어 처리할 수 있기에 다른 형식에 비해 성능이 우수함

'Web Study > DataBase' 카테고리의 다른 글

SQLD - 함수 - 단일행 함수  (0) 2023.09.13
SQLD - Join 에 대해  (0) 2023.09.10
SQLD - 정규 표현식  (0) 2023.08.30
SQLD - 정규화/반정규화  (0) 2023.08.23
SQLD - 스키마, ERD  (0) 2023.08.21