카테고리 없음

[SQL] My SQL : 트랜잭션 (Transaction)

  • -
반응형

 

 

[SQL] My SQL : 트랜잭션 (Transaction) 

 


 

     ∇ 트랜젝션(Transaction) 이란?


       트랜젝션(Transaction)의 사전적 의미는 '거래'이고,

       CS분야에서 트랜젝션은 "더 이상 분할이 불가능한 업무처리의 단위[분할할 수 없는 최소 단위]"를 의미합니다.

 

        즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미합니다.

               = "데이터베이스의 상태를 변환시키기 위한 작업의 기본 단위."

               = "DB의 상태를 유지하기 위해 모든 연산이 성공적으로 완료되거나, 그렇지 않으면 전형 수행 X"

               = "DB와 어플리케이션(디바이스)의 데이터 거래(Transaction)에 있어서 안전성을 확보하기 위한 방법"

 

                # DB에서 테이블의 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는 도중에

                   오류가 발생하면, 결과를 재반영 하는 것이 아니라,

                   모든 작업을 원상태로 복구하고, 처리 과정이 모두 성공하였을때 만 그 결과를 반영합니다.

 

 


 ∇ MySQL 트랜젝션.

      MySQL에서 트랜젝션은 "DB의 상태를 바꾸는 일종의 작업 단위"입니다.

        MySQL에서 입력하는 모든 쿼리 명령어들은 각각 하나의 트랜젝션이라고 할 수 있습니다.

 

INSERT, DELETE, UPDATE 등의 SQL 명령문을 통해 데이터의 상태를 바꿀 때마다

내부에서 자동적으로 COMMIT을 실행하여 변경된 내역을 DB에 반영하는 과정이 진행되는 것 입니다. 

 

 


∇트랜잭션 특징.[4가지]

 

원자성 (Atomicity) 원자성은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것이다.  

트랜잭션은 사람이 설계한 
논리적인 작업 단위로서, 일처리는 작업단위 별로 이루어 져야 사람이 다루는데 무리가 없다.

만약 트랜잭션 단위로 데이터가 처리되지 않는다면, 설계한 사람은 데이터 처리 시스템을 이해하기 힘들 뿐만 아니라, 오작동 했을시 원인을 찾기가 매우 힘들어질것이다.
일관성 (Consistency) 일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것이다. 

트랜잭션이 진행되는 동안에 데이터베이스가 변경 되더라도
업데이트된 데이터베이스로 트랜잭션이 진행되는것이 아니라, 
처음에 트랜잭션을 진행 하기 위해 참조한 데이터베이스로 진행된다.

이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼 수 있는 것이다.
독립성 (Isolation) 독립성은 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 
어떤 하나의 트랜잭션이라도, 다른 트랜잭션의 연산에 끼어들 수 없다는 점을 가리킨다.

하나의 특정 트랜잭션이 완료될때까지, 다른 트랜잭션이 특정 트랜잭션의 결과를 참조할 수 없다.
영구성 (Durability) 지속성은 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 점이다.

 

 

 

∇트랜잭션의 기본 명령어.

     - COMMIT : 트랜잭션 내의 모든 작업을 영구적으로 반영.

     - ROLLBACK : 트랜잭션 내의 모든 작업을 취소하고, 데이터베이스를 틀내잭션 시작 전 상태로 되돌립니다.

 


∇트랜잭션의 상태.

 

 

COMMIT

 

 

ROLLBACK, 하기전 INSERT

 

       ROLLBACK을 진행했음에도, 데이터가 지워지지 않는데,

이건 Mysql이 AUTOCOMMIT 기능을 제공하기 때문입니다.

[ 쿼리문 끝에 ;을 찍을 때마다 DB에서 자동으로 COMMIT을 해줍니다. ]

 

이미 COMMIT이 진행된 경우, RollBACK이 불가능합니다.

 

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.