트랜잭션을 이해하기 쉬운 가장 쉬운 상황 : 계좌이체
J는 20만원이 차감되고 H한테는 20만원이 추가되어야한다.
그런데 만약 J는 20만원이 차감되고, H에게 20만원이 추가되어야하는 도중 에러가 발생했을 경우 어떻게 할까
두개의 쿼리가 모두 정상적으로 처리되어야 하는 논리적인 하나의 작업단위
★ 하나의 트랜잭션에 존재하는 SQL중 일부만 성공하거나, 1개만 실행이 실패한 경우 DB에 반영되는 일은 일어나지 않는다.
지금까지 작업한 내용을 DB에 영구적으로 저장하며, transaction을 종료한다.
지금까지 작업들을 모두 취소하고 transaction 이전 상태로 되돌린다.
transaction을 종료한다.
commit 후 rollback을 진행할 경우 transaction이 종료되었기 때문에 이전 작업으로 돌아가지 않는다.
Transaction을 시작한다 = Auto commit이 off된다.
JAVA의 JDBC 예시
트랜잭션의 특징 4가지 ACID : 원자성, 일관성, 고립성, 내구성
원자성 : 하나의 트랜잭션에서 모두 성공하거나 모두 실패하거나
논리적으로 쪼개질 수 없는 작업 단위
개발자는 언제 rollback을 할지, commit을 할지 정해야하고, commit과 rollback을 담당하는것은 DBMS이다.
일관성 : 트랜잭션은 데이터베이스의 일관성을 유지해야한다.
H의 계좌가 200만원인것을 확인하고 20만원을 추가하려는 순간 H의 통장에 더 먼저 30만원이 들어왔다. 때문에 230만원 +20만원 해야하지만, 200 + 200만원을 한다.
여러 트랜잭션들이 동시에 실행되어도 혼자 각각 실행되는것처럼해야한다.
하나의 트랜잭션은 다른 트랜잭션의 영향을 받거나 주면 안된다.
지속성 : commit된 transaction은 DB에 영구적으로 저장한다.