트랜잭션이란 한 묶음으로 처리되어야 하는 SQL 명령문들의 집합입니다.
여기서 중요한 내용은 한 묶음입니다.
한 묶음으로 처리되어야 한다 이게 핵심인데 왜 한 묶음인걸 강조하는 걸까요?
예를들어 봅시다.
영희는 꿈에 그리던 주택을 얻기 위해 2억원이라는 큰 돈을 은행을 통해 판매자에게 주기로 합니다.
만약 이러한 거래가 있으면 거래는 다음과 같은 방식으로 처리되겠죠?
1. 자신의 통장 돈 액수 2억원 감소 / UPDATE 구문
2. 판매자 통장 돈 액수 2억원 증가 / UPDATE 구문
근대 1. 만 작동하고 문제가 생겨서 2. 는 작동하지 못했습니다.
이런 상황에서 돈은 어떻게 됬냐면....날라가버렸습니다
이러한 현상을 방지하기 위해선 어떻게 해야할까요??
여러가지 방법이 있겠지만 다음과 같은 방법이 가장 간단할거같지 않나요?
1.을 실행시킨뒤 2.를 실행 둘다 정상 실행됬으면 데이터베이스에 반영 도중 실패하면 명령어 취소
그러면 1.과 2.를 한 묶음으로 처리하는 것과 동일하겠죠?
이것이 트랜잭션의 기본 개념입니다.
기본으로 트랜잭션에는 커밋과 롤백이라는 기능이 있습니다.
커밋(commit)은 트랜잭션의 실행 결과를 데이터베이스에 최종적으로 반영하는 것을 말합니다.
롤백(rollback)은 실행 결과를 반영하지 않고 취소하여 원래 상태로 되돌리는 것이죠. 이러면 커밋되기전까지 데이터베이스에 보내진 SQL명령어는 어떻게 처리되냐하면 임시 실행 결과를 만들어 놓고 커밋되면 데이터베이스에 반영되기를 기다리고 있습니다.
이러한 트랜잭션은 크게 3가지 종류를 가지고 있습니다. 이러한 종류를 구분하는 기준은 트랜잭션이 시작되는 시점과 끝나는 시점에 따라 구분이 됩니다. 이제 트랜잭션의 3가지 종류인 명시적 트랜잭션, 자동완료 트랜잭션, 수동완료 트랜잭션을 알아봅시다.
1. 명시적 트랜잭션
이 트랜잭션은 시작과 끝을 사용자가 직접 명시하는 트랜잭션입니다.
예
START TRANSACTION;
---
SQL 쿼리문;
---
COMMIT 또는 ROLLBACK ;
2. 자동완료 트랜잭션
이 트랜잭션은 시작과 끝 모두 시스템이 자동으로 달아서 합니다.
더 정확히는 모든 SQL 쿼리문마다 트랜잭션 처리를 하여 처리를 하죠
보통 DBMS의 설정을 건드려 on-off할 수 있습니다.
3. 수동완료 트랜잭션
위에서 보았던 자동완료 트랜잭션은 모든 쿼리문 시작에 START TRANSACTION을 달고 쿼리문 끝에는 COMMIT을 답니다.
이 수동완료 트랜잭션은 시작점은 지정하지 않고 끝나는 시점만 지정합니다.
예를 들어 이렇게 말이죠
SQL 쿼리문 1
SQL 쿼리문 2
SQL 쿼리문 3
COMMIT 또는 ROLLBACK
이 수동완료 트랜잭션에서는 무조건 데이터를 반영하기 위해서 COMMIT을 입력해줘야합니다.
그대로 컴퓨터를 종료하면 앞서 입력한 SQL 쿼리문들은 날라가게됩니다.
이제 남은 문제는 2억원 날린 영희씨는 은행에 소송을 걸면되겠군요
'IT개념' 카테고리의 다른 글
ER(객체 관계)모델과 다이어그램이란 무엇일까요? (1) | 2020.05.29 |
---|---|
알송달송한 데이터베이스 정규화의 뜻 쉽게 풀이하면?(1~3정규화와 BCNF) (0) | 2020.05.24 |
알송달송한 데이터베이스 정규화의 뜻 쉽게 풀이하면?(이상 현상과 함수 종속성) (0) | 2020.05.23 |
WRITTEN BY