관리 메뉴

JIE0025

[DB] 트랜잭션(Transaction) 개념, 예제 본문

백엔드/데이터베이스

[DB] 트랜잭션(Transaction) 개념, 예제

Kangjieun11 2022. 10. 13. 19:35
728x90

 

트랜잭션?

데이터베이스의 상태를 변경시키기 위해 수행하는 작업의 단위

데이터베이스의 상태를 변화시킨다는 말의 의미는 SQL질의어를 이용해 데이터베이스를 접근하는 것이다.
작업의 단위는 질의어 한문장이 나이고, 사람이 정하는 기준에 따라 정해진다.


예시
게시판 글 작성 -> 작성 버튼 클릭 -> 업데이트 된 게시판 리스트를 보는 상황에서

1) 사용자가 글 작성 버튼 클릭시 insert문 사용
2) 게시판을 구성할 데이터를 Select해서 최신 정보 유지

이 상황에서 작업의 단위는 insert + select


** 관리자와 개발자가 트랜잭션 설계를 잘 하면 데이터를 다룰때 많은 이점이 있음.

트랜잭션 특징

1) 원자성 (Automicity)
트랜잭션이 데이터 베이스에 모두 반영되거나, 전혀 반영되지 않아야 함.

2) 일관성 (Consistency) :
트랜잭션 작업 처리의 결과는 항상 일관적이어야한다.
(데이터타입이 반환후 전이 항상 동일)

3) 독립성 (Isolation)
하나의 트랜잭션은 다른 트랜잭션에 간섭할 수 없다. 트랜잭션은 독립적이다.

4) 지속성 (Durability)
트랜잭션이 성공적으로 완료되면 영구적으로 결과에 반영되어야 한다.




트랜잭션 Commit, Rollback 연산

Commit : 하나의 트랜잭션이 성공적으로 끝나 DB가 일관성있는 상태에 있음을 의미

Rollback : 트랜잭션의 원자성이 깨진, (하나의 트랜잭션 처리가 비정상적으로 종료 된) 상태


- COMMIT은 DB에 영구 저장되고, 하나의 트랜잭션 과정이 종료 됨. 데이터가 완전히 반영됨
- ROLLBACK 은 작업 중 문제가 발생되어 변경사항을 취소하는 명령어인데, 명령을 트랜잭션에 넣으머ㅕㄴ, 트랜잭션이 시작되기 이전의 상태로 되돌아감. (마지막 COMMIT을 완료한 시점으로 돌아간다)


트랜잭션 예제 코드


🔽 공식 레퍼런스 제시된 코드 🔽

START TRANSACTION
    [transaction_characteristic [, transaction_characteristic] ...]

transaction_characteristic: {
    WITH CONSISTENT SNAPSHOT
  | READ WRITE
  | READ ONLY
}

BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}



START TRANSACTION / BEGIN으로 시작
COMMIT / ROLLBACK으로 끝남.



예제

#test tbl 생성
CREATE TABLE testtbl(
	ID INT NOT NULL
);

#트랜잭션 생성1
BEGIN;
INSERT testtbl VALUE(1);
ROLLBACK;


#트랜잭션 테스트1
SELECT * FROM testtbl;


#트랜잭션 생성2
START TRANSACTION;
INSERT testtbl VALUE(1);
ROLLBACK;

#트랜잭션 테스트2
SELECT * FROM testtbl;



결과 :: 두 테스트 모두 마지막에 rollback되어 테이블에 아무런 속성이 없음.