트랜잭션
컴퓨터 과학에서의 트랜잭션은 더 이상 분할이 불가능한 업무 처리의 단위를 의미하며 데이터베이스에서 트랜잭션은 데이터베이스의 상태를 바꾸는 일종의 작업 단위이다.
데이터베이스를 예로 들어보면 이해가 쉽다. 은행에서 돈을 인출/입금하는 행위의 경우
- 돈을 인출 → 기존의 잔고에서 인출한 만큼의 금액 차감
- 돈을 입금 → 입금 계좌의 잔고가 입금한 금액만큼 증가 와 같은 순서로 업무 처리가 이루어지는데, 만약 이 과정중에 하나라도 결여가 생겨 입금이 되었는데 돈이 들어오지 않았다든지, 인출했지만 돈이 빠져나가지 않았다면 치명적인 결과를 초래한다. 그렇기에 해당 인출/입금은 두 개의 작업을 따로 나누는 것이 아니라, 하나로 처리해야 할 필요성이 있다. 즉, 둘 다 실패하거나 성공하거나 둘 중 하나여야 한다는 것이다. 이렇듯 더이상 분해할 수 없는 업무 처리의 단위를 트랜잭션이라고 한다.
MySQL에서의 트랜잭션
위에서 데이터베이스에서 트랜잭션은 데이터베이스의 상태를 바꾸는 일종의 작업 단위라고 했다. 따라서 데이터베이스의 관점에서 트랜잭션이랑 모든 쿼리 명령어들이라고 생각할 수 있다. SQL 명령문을 실행하면 해당 명령문에 따라 데이터의 상태를 바꾸게 되는데, MySQL의 경우 데이터의 상태가 바뀔 때마다 내부적으로 자동적으로 데이터베이스에 영구적으로 반영(commit)하게 된다.

따라서 새로운 명령문이 들어오면 명령에 대해서 실행하고 데이터베이스에 반영하는 과정 자체가 하나의 트랜잭션으로 분류되며, 이 과정 중 하나라도 문제가 생기게 되면 그대로 폐기한다
위와 같은 사진은 트랜잭션 상태를 나타낸 것으로, 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 흐름이다. 보면 부분완료(Partially Committed)가 된 상태라고 해도 여기서 트랜잭션이 비정상적으로 종료된다면 Rollback연산을 통해 기존의 작업을 철회(Abort)하는 것을 볼 수 있다. 따라서 트랜잭션은 committed될 때까지 끝이 아닌 것이다.
Rollback 트랜잭션의 처리 과정에서 발생한 변경 사항을 취소 트랜잭션이 시작되기 이전 상태로 돌아감
트랜잭션의 특징
트랜잭션의 특징은 대표적으로 4가지의 특징이 있다.
| 특징 | 설명 |
|---|---|
| 원자성(Atomicity) | 트랜잭션은 데이터베이스에 모두 반영되던가, 모두 반영되지 않던가 두 가지의 경우만이 존재함 |
| 일관성(Consistency) | 트랜잭션이 성공적으로 완료되면 데이터베이스 는 일관된 상태를 유지해야 함 |
| 독립성(Isolation) | 동시에 수행되는 트랜잭션은 서로 간섭할 수 없음 |
| 영구성(Durability) | 트랜잭션이 완료되면 그 결과는 영구적으로 저장되어야 함 시스템 오류가 발생해도 데이터는 손실되지 않음 |
MySQL에서 트랜잭션하기
START TRANSACTION; -- 트랜잭션 시작
select * from members; -- 초기 상태 보여줌
insert into members values(1, '쿠', '크다스', '크라운제과' '?', '대한민국'); -- 데이터 수정
select * from members; -- 수정 상태 보여줌
COMMIT -- 트랜잭션을 DB에 적용
select * from members; -- 적용된 결과 조회MySQL에서 Rollback하기
START TRANSACTION; -- 트랜잭션 시작
insert into members values(5, '쿠', '크다스 동생', '크라운제과', '?', '대한민국'); -- 데이터 수정
select * from members; -- 수정 상태 보여줌
ROLLBACK -- 트랜잭션을 취소하고 START TRANSACTION 실행 전 상태로 롤백함
select * from members; -- 조회