[데이터베이스 - 트랜잭션]

yedy·2023년 5월 15일
0

[mySQL]

목록 보기
12/16
post-thumbnail

✔️ 트랜잭션의 개념

DBMS에서 데이터를 다루는 논리적인 작업의 단위

  • 데이터베이스에서 트랜잭션을 정의하는 이유
    - DB에서 데이터를 다룰 때 장애가 일어날 때 데이터를 복구하는 작업의 단위가 됨.
    - 데이터베이스에서 여러 작업이 동시에 같은 데이터를 다룰 때 작업을 서로 분리하는 단위가 됨.
  • 트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 함
    예) 은행 업무를 보는데 A계좌(박지성)에서 B계좌(김연아)로 10,000원을 이체할 경우


✔️ 트랜잭션의 성질(ACID)

  • 원자성(Atomicity)
    트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 함.

  • 일관성(Consistency)
    트랜잭션을 수행하기 전이나 수행한 후나 데이터베이스는 항상 일관된 상태를 유지해야 함.

  • 고립성(Isolation)
    수행 중인 트랜잭션에 다른 트랜잭션이 끼어 들어 변경 중인 데이터 값을 훼손하는 일이 없어야 함.

  • 지속성(Durability)
    수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 함.

🔺 원자성
-트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다는 의미.
-일부만 수행되는 일이 없도록 전부 수행하거나 아예 수행하지 않아야 함.

🔺 일관성
-트랜잭션은 DB이 일관성을 유지해야 함.
-일관성은 테이블 생성 시 CREATE 문과 ALTER 문의 무곃성 제약조건을 통해 명시.

DB 변경 중과 변경 후의 일관성

🔺 고립성
-DB는 공유가 목적이므로 여러 트랜잭션이 동시에 수행됨
-동시에 수행되는 트랜잭션은 상호 존재를 모르고 독립적으로 수행 -> 고립성
-고립성을 유지하기 위해서는 트랜잭션이 변경 중인 임시 데이터를 다른 트랜잭션이 읽고 쓸 때 제어가 필요

트랜잭션의 동시 수행과 데이터 공유

🔺 지속성
트랜잭션이 정상적으로 완료(commit) 혹은 부분완료한 데이터는 DBMS가 책임지고 데이터 베이스에 기록하는 성질

트랜잭션의 상태도

✔️ 트랜잭션과 DBMS

✔️ 동시성 제어(concurrency control)

  • 동식성 제어
    트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능

✔️ 갱신손실 문제

- 갱신손실(lost, update)
두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생
데이터베이스에서 절대 발생하면 안 되는 현상

✔️ 락의 개념

락을 이용한 갱신손실 문제 해결

언락 했다가 락 해주고 해야함!!

🔺 2단계 락킹
락을 걸고 해제하는 시점에 제한을 두지 않으면 두 개의 트랜잭션이 동시에 실행될 때 데이터의 일관성이 깨질 수 있어 이를 방지하는 방법.

🔺 데드락
두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상. 교착상태라고도 함.

✔️ 오손 읽기

읽기 작업을 하는 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽기 때문에 생기는 문제

✔️ 반복 불가능 읽기

트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(갱신, UPDATE) 트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제

✔️ 유령데이터 읽기

트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(삽입,INSERT) 트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제

✔️ 트랜잭션 고립 수준 명령어

profile
공주 개발자

0개의 댓글