Transaction [DB]

Rudy·2023년 8월 9일
0

Transaction 이란

  • 단일한 논리적인 작업 단위
  • 논리적인 이유로 여러 SQL 문들을 단일 작업으로 묶어서 나눠질 수 없게 만든다
  • Transaction SQL 문들 중에 일부만 성공해서 DB에 반영되는 일은 일어나지 않는다

사용방법

  1. Transaction을 시작한다
  2. 데이터를 읽거나 쓰는 등의 SQL문들을 포함해서 로직을 수행한다
  3. 일련의 과정들이 문제없이 동작했다면 Transaction을 commit 한다
  4. 중간에 문제가 발생했다면 Transaction을 rollback 한다

RollBack

  • 지금까지 작업들을 모두 취소하고 Transaction 이전 상태도 되돌린다
  • Transaction을 종료한다

AutoCommit

  • 각각의 SQL문을 자동으로 Transaction 처리 해주는 개념이다
  • START Transaction 실행과 동시에 autocommit은 off 된다
  • SQL문이 성공적으로 실행하면 자동으로 commit 한다
  • 실행 중에 문제가 있었다면 알아서 rollback 해준다
  • Mysql에서는 defalut로 aotocommit이 활성하 되어 있다
  • 다른 DBMS 비슷하지만 다를수 있다
  1. MYSQL 에서는 실행과 동시에 autocommit은 off된다
  2. Commit / rollback과 함께 Transaction 이 종료되면 원래 autocommit 상태로 돌아간다.

Transaction ACID

Atomicity 원자성

두가지 모두 성공하거나 모두 실패하거나 해야 한다
중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무 일도 없었던 것처럼 rollback 한다

Consistency 일관성

  1. Transaction 은 DB 상태를 일관성 상태에서 또 다른 일관성 상태로 바꿔줘야 한다
  2. constraints, trigger 등을 통해 DB에 정의된 rules 을 Transaction 이 위반했다면 rollback 해야 한다
  3. Transaction 이 DB에 정의된 조건을 위반했는지는 DBMS가 commit 전에 확인하고 알려준다

Isolation 고립성

  1. 여러 Transaction들이 동시에 실행될 때도 혼자 실행되는 것처럼 동작하게 만들어준다
  2. DBMS는 여러 종류의 isolation level을 제공한다
  3. 개발자는 isolation level 중에 어떤 level로 Transaction을 동작시킬지 설정할 수 있다
  4. concurrency control의 주된 목표가 isolation이다

Durability 연종성

  1. commit된 Transaction은 DB에 영구적으로 저장한다
  2. DB에 문제가 생겨도 commit된 Transaction은 DB에 남아 있는다
  3. Transaction의 연종성은 DBMS가 보장한다
profile
주니어 개발자

0개의 댓글