본문 바로가기

ComputerScience/Database

[Database] Transaction

Transaction

  • Transaction 은 여러 SQL문들을 논리적 단위로 묶어 하나의 작업 단위로 처리하는 것이다.
  • Transaction 내의 SQL문 중 일부만 성공한 경우에도 DB에 반영되지 않고 모두 성공해야만 DB에 반영된다.
  • 예를 들어, J가 H에게 20만원을 이체할 때, 계좌 변동은 J의 계좌에서 20만원이 제거되고, H의 계좌에 20만원이 추가되어 최종적으로 J는 80만원, H는 220만원이 된다.
  • 이러한 계좌 변동 내용은 SQL 문으로 표현할 때 Balance 테이블을 업데이트하여 잔액을 반영하는 방식으로 처리한다.
  • 하나의 Transaction 내에서 SQL문이 실패하면 이전 상태로 되돌린다. 따라서 중복작업을 방지할 수 있으며 데이터 일관성을 유지할 수 있다.
  • 아래는 Transaction이 처리되는 과정이다.
이미지 출처: https://media.geeksforgeeks.org/wp-content/uploads/20230915172115/Transaction-in-dbms.png

Commit

  • 지금까지 작업한 내용을 DB에 영구적으로 저장하는 것
  • Transaction을 종료한다.

RollBack

  • 지금까지 작업들을 모두 취소하고 Transaction 이전 상태로 되돌리는 것
  • Transaction을 종료한다.

AutoCommit

  • 각각의 SQL문을 자동으로 Transaction 처리 해주는 개념
  • MySQL에서는 AutoCommit이 활성화되어 있으며, 다른 DBMS에서도 대부분 이 기능을 제공한다.
  • 활성화 되어있지 않다면 START TRANSACTION; 을 입력하고 COMMIT; 해야함.
  • 현재 AutoCommit이 활성화 되어 있는지 확인하는 쿼리문을 작성해 이를 통해 AutoCommit이 켜져있음을 확인함.
  • AutoCommit이 켜져있는 상태에서 Insert 문을 실행시키면 자동으로 Commit이 되도록 설정되어 있음.
  • AutoCommit을 비활성화 시키면 수행한 작업에 대한 Commit이 자동으로 이루어지지 않기 때문에, 나중에 직접 Commit을 수행해야 함을 알게됨.
  • 이를 통해 MySQL에서 AutoCommit의 동작 원리와 가능성에 대해 학습할 수 있음.
  • 트랜잭션을 실행하면 AutoCommit이 비활성화되며 RollBack이나 Commit 명령어로 따로 처리해야 커밋이 됨.
  • 트랜잭션 실행 이전의 AutoCommit 상태는 트랜잭션이 종료되면 다시 복원됨.
  • 테이블 업데이트 시 트랜잭션 수행 전에 이미 활성화된 AutoCommit은 트랜잭션이 끝나도 비활성화 상태로 유지됨.
  • MySQL은 기본적으로 AutoCommit이 활성화된 상태로 시작하지만, Oracle은 AutoCommit이 비활성화된 상태로 시작하므로,
    각 RDBMS의 문서를 확인하여 AutoCommit 설정이 어떻게 되어 있는지 확인하는 것이 중요

참고 자료

https://www.youtube.com/watch?v=sLJ8ypeHGlM&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=14