트랜잭션은 컴퓨터 과학분야에서는 쪼개질 수 없는 업무처리의 단위를 의미하며 MySQL에서는 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위라고 한다.
다음의 상황을 보자
위의 상황에서 인출은 성공했지만 입금에서 실패하여 안좋은 결과가 나왔다.
그래서 이러한 상황은 두 과정이 둘 다 성공하거나 둘다 실패해야만 한다.
이 두 과정을 성공 또는 실패하도록 묶어주는 것이 트랜잭션이다.
그래서 MySQL에서의 트랜잭션을 살펴보자
MySQL에서의 트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위를 뜻하며 SQL 명령문(INSERT, DELETE, UPDATE)을 통해서 데이터의 상태를 바꾸게 되는데 상태가 바뀔때 마다 내부적으로 Commit을 자동으로 실행하여 변경점을 데이터베이스에 반영하는 것이다.
참고로 작업단위는 질의어 한문장이 아니라 많은 SQL명령문들을 사람이 정하는 기준에 따라 정하는 것을 의미한다. 그래서 하나의 트랜잭션의 설계를 잘해야 많은 이점이 생긴다.
- 원자성(Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되거나 반영되지 않아야 한다.
- 일관성(Consistency) : 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야한다.
- 독립성(Isolation) : 둘 이상의 트랙잰션이 실행되고 있다면 서로의 연산에 끼어들 수 없다.
- 영구성(Durability) : 트랜잭션이 성공하였을 때, 결과는 영구적으로 반영되어야 한다.
활성(Active) : 트랜잭션이 정상적으로 실행중임을 의미한다.
성공시
부분 완료(Partially Committed) : Commit연산이 실행되기 직전의 상태
완료(Committed) : 트랜잭션이 성공적으로 종료되었고 Commit연산까지 실행함
실패시
실패(Failed) : 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어서 Rollback 연산을 수행한 상태
참고)
Commit : 모든 작업들을 정상 처리하겠다고 확정하는 명령어이며, 처리 과정을 데이터베이스에 영구 저장한다는 의미이다. 그리고 Commit을 수행하면 하나의 트랜잭션 과정이 종료된다는 의미도 있다.
Rollback : 트랜잭션의 처리 과정중 문제가 발생된 경우 발생한 변경사항을 취소하는 명령어이다. 해당 명령이 실행되면 트랜잭션은 시작되기 이전의 상태로 돌아간다. 즉, Commit 하여 저장한 예전 상태를 복구하는 것이다.
참고한 사이트 : https://inpa.tistory.com/m/entry/MYSQL-%F0%9F%93%9A-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98Transaction-%EC%9D%B4%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC
https://gyoogle.dev/blog/computer-science/data-base/Transaction.html