[데이터베이스] 트랜잭션(Transaction)

서유진·2022년 9월 24일
0

기술이 술술

목록 보기
2/5
post-thumbnail

트랜잭션(Transaction)

  • 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위,
    하나의 논리적인 작업의 단위
  • 작업단위는 많은 질의어를 갖는다.

질의어
SELETE, UPDATE, DELETE, …

하나의 트랜잭션은 COMMIT 되거나 ROLLBACK 된다

트랜잭션은 왜 사용할까??

트랜잭션은 하나의 논리적인 작업의 단위이기 때문에, 여러 개의 작업을 하나의 논리적인 단위로 묶어서 반영과 복구를 조정할 수 있기 위해 사용한다.

따라서, 데이터의 부정합이 일어났을 경우 롤백을 하여 데이터의 부정합을 방지할 수 있다

트랜잭션 예시

두 가지의 수정을 하는 하나의 트랜잭션이다.

start transaction;  # 시작

-- 쿼리문 1 : 수정 전 상태 확인 ( select )
select *
from dal.thumbs;

-- 쿼리문 2 : 수정 ( Delete ) 
Delete from dal.thumbs
where thumb_id = 1;

savepoint name1;  #"name1” 이라는 이름의 savepoint 설정


-- 쿼리문 2 : 수정2 ( Delete ) 
Delete from dal.thumbs
where thumb_id = 2;

-- 쿼리문 3 : 수정 후 상태 확인  ( select ) 
select *
from dal.thumbs;

여기서 트랜잭션을 완료하려면 커밋을 한다.

commit; # 저장, 1개의 트랜젝션 끝

하지만, 만약 문제가 생긴다면 ROLLBACK 연산을 사용한다

-- 마지막 커밋으로 돌아간다.
rollback;

-- savepoint 위치까지만 남기고, 그 아래 문장들만 ROLLBACK 한다
rollback ro name1

DDL문(CREATE, DROP, ALTER, RENAME, TRUNCATE)은 transaction의 rollback 대상이 아니다.

트랜잭션 연산 종류

  • COMMIT 연산
    트랜잭션이 성공적으로 수행되었고, DB에 반영된다.
  • ROLLBACK 연산
    트랜잭션의 수행이 실패하였고, 연산의 결과를 취소한다.
    수행 전으로 되돌아간다.

트랜잭션 상태

  • 트랜잭션이 연산을 실행 중인 상태
  • 트랜잭션이 연산을 실행하다가 오류가 발생해 중단된 상태
  • 트랜잭션이 Commit된 상태
  • 트랜잭션이 Rollback된 상태

트랜잭션 특징

오백번 강조해도 지나치지 않을 ACID

profile
Backend Dev.

0개의 댓글