본문 바로가기

Data/MariaDB

DB] 트랜젝션(TRANSACTION)

 

Transaction

database 에서 사용되는 쪼갤 수 없는 업무 처리의 단위.

ALL or Nothing,

작업 내부의 과정이 하나라도 잘못되면 모두 취소되어야 한다.

 

예시)

5000만원을 송금하는 과정은 '5000만원을 A의 계좌에서 출금'하고 'B의 계좌에 입금'하는 2번의 과정으로 나눠져있다.

만약 5000만원이 'A의 계좌에서 출금'하는 것 까진 성공했으나 

'B의 계좌에 입금'하는 것을 실패하게 되면 그 5000만원은 어디로 갔는지 알 수 없게 된다.

따라서 5000만원을 'A에게서 출금'하는 것과 'B에게 입금'하는 것은 트랜젝션으로 묶어 한 번에 처리해야 안전하다.

이 때 사용되는 것이 rollback 과 commit 이다.

입금 실패 하면 출금까지 rollback, 출금과 입금 모두 성공 시에 commit

 

commit 과 rollback
commit; -- 최종 확정
rollback; -- 되돌리기

 

  • commit : 현재까지 실행된 내요을 저장 -> 되돌릴 수 없다.
  • rollback : 되돌리는 작업. -> commit 이후에는 할 수 없다.
  • commit 이나 rollback은 DML(update,delete,insert) 에만 사용된다.
  • DDL(create,alter,drop)에 사용할 수 없다.

위에 DML 에서 select가 빠지는 이유는 검색이 데이터에 영향을 주진 않기 때문이다.

 

보통 DB 는 auto commit을 제공한다.

auto commit은 작업 중간중간 자동으로 commit 해주는 것이다. auto commit은 켜고 끌 수 있다.

 

auto commit 현재 설정 확인
select @@autocommit;

 1 : 설정
 0 : 미설정

 

 

auto commit 기능 켜고 끄기
set autocommit = 0; -- 끄기
set autocommit = 1; -- 켜기

 

autocommit 끈 상태로 rollback 해보기.

 

웹에서 트랜젝션의 예시)

블로그 글 목록 중에서 특정 글을 눌렀을 때 글은 들어가졌는데 오류로 내용이 나오지 않았다.

이 때 글의 조회수를 올랐다고 계산하면 안되기 때문에 트랜젝션을 사용한다.