Transaction

귀찮Lee·2023년 2월 14일
0

DataBase / MySQL

목록 보기
3/16
post-thumbnail
post-custom-banner

원티드 프리온보딩 2월 "MySQL 잘 사용하기" 학습내용 2일차 - 1

◎ Transaction

  • 데이터베이스를 상태를 바꾸는 일종의 작업 단위

    • 작업의 단위는 많은 질의어 명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미
    • 기본적으로 SQL query 한개 이 자체도 하나의 Transaction이라고 볼 수 있지만, 하나 이상의 쿼리를 묶어서 Transaction으로 만들어 줄 수 있다.
  • 작업의 완전성을 보장해 줌

    • 작업셋을 모두 완벽하게 처리하거나, 원상태로 복구해주는 것

◎ Transaction의 특징 (ACID)

  • Atomicity(원자성)

    • 하나의 트랜잭션에 속해있는 모든 작업이 전부 성공하거나 전부 실패해야함
    • 결과가 예측 가능함 : 전부 성공하여 다 되거나 하나도 안됨
  • Consistency(일관성)

    • 데이터베이스의 상태가 일관적 : 하나의 트랜젝션 이후 데이터베이스의 상태는 이전과 같이 유효
    • 트랜젝션 이후에도, 데이터베이스가 가지고 있는 기본적인 제약은 지켜져야함
    • ex) non-nullable 한 데이터를 null로 만들 수 없다.
  • Isolation(격리성, 고립성)

    • 모든 트랜잭션은 다른 트랜잭션으로부터 독립적
    • 한 트랜젝션이 다른 트렌젝션에 영향을 줄 수 없다.
    • 만약 서로 영향을 주게 된다면 실패로 간주하게 됨
  • Durability(지속성)

    • 하나의 트랜잭션이 성공적으로 수행되었다면, 해당 트랜잭션에 대한 로그가 남아야 한다.
    • 런타임 오류나 시스템 오류가 발생하더라도, 해당 기록은 영구적이어야 함

◎ Transaction States

text

  • Active State

    • Transaction이 진행중인 상태
    • 읽기 또는 쓰기가 정상적으로 진행된 경우, “Partially Committed State”
    • 읽기 또는 쓰기가 실패한 경우, “Failed State”
  • Partially Committed State

    • 모든 읽기 쓰기 데이터가 DB에 저장된 경우 “committed state”로 이동
    • DB에 저장이 실패한 경우, “Failed State”
  • Failed State

    • Transaction의 명령이 실패하거나 DB에 데이터 저장, 변경에 실패한 경우
  • Aborted State

    • local buffer 또는 main memory에 있는 변경 사항들을 지우거나 롤백함
    • "Terminated State"로 이동함
  • Committed State

    • DB에 모든 내용이 저장된 상태
    • "Terminated State"로 이동함
  • Terminated State

    • 롤백이나 다른 커밋 상태가 없을 때
    • 이전에 있었던 transaction은 지우고 새로운 transaction에 대기하는 상태

◎ ROLLBACK의 구현 방법 - Undo Log

  • Undo Log

    • 행 취소 로그 레코드의 집합
    • Transaction 실행후 Rollback 시 Undo Log 를 참조해 이전 데이터로 복구할수 있도록 로깅 해놓은 영역
  • Undo Log 특징

    • 실제 변경되는 컬럼의 변경되기 이전값과 PK 값만 저장
      • ex) user 테이블에서 age 값만 변경했다고 가정하면 변경 이전에 age 에 대한값과 PK 값만 Undo Log 레코드에 들어가게 된다.

        text

◎ 참고 자료

profile
배운 것은 기록하자! / 오류 지적은 언제나 환영!
post-custom-banner

0개의 댓글