간단히 말해 하나의 유의미한 결과물을 내기 위해 필요한 여러 SQL 명령문을 하나로 묶어놓은 것을 의미한다.
은행에서 돈을 이체하는 과정이 일어나려면 사용자 A의 계좌에서는 돈을 빼고 그 돈을 B의 계좌에 넣어줘야 한다. 출금과 입금 중 무엇 하나라도 잘못되면 이체라는 결과물은 바르게 일어나지 않는다
롤백이란 트랜잭션 과정 중에 실행할 수 있는 명령어로 실행 시 해당 트랜잭션 이전 상태로 되돌린 후 트랜잭션을 종료한다.
auto commit이란 SQL 명령어 실행 중 오류가 날 경우 자동으로 롤백하고 성공 시 자동으로 커밋을 해준다. 보통 SQL에서는 auto commit 기능이 켜져 있다.
만약 auto commit 기능을 끄고 코드를 실행하면 직접 commit 명령어를 입력하지 않는 이상 결과값이 저장되지 않는다. 따라서 롤백을 사용해 최종 commit 직후로 되돌리기가 가능하다.
앞에서 transaction이란 명령어를 실행하면 자동으로 auto commit 기능이 꺼진다. 따라서 트랜잭션의 과정 중에는 언제든지 롤백이 가능하고 롤백이나 commit을 입력하여 트랜잭션을 마치면 결과가 저장되고 auto commit 또한 기존 상태로 돌아간다.
- START TRANSACTION으로 트랜잭션 시작
- 필요한 SQL 명령 실행
- 오류-롤백으로 되돌리기, 성공-커밋으로 저장 및 종료
이걸 자바로 코딩하면 이렇게 된다.

하지만 이런 부분들은 실제 트랜잭션에 필요한 SQL 명령문들만 있으면 더 편할 것이다.
-@transaction(springboot, spring)을 사용하여 필요한 명령문들을 제외하고 나머지를 가릴 수 있다.
Atomicity(원자성)-트랜잭션 내부의 코드들은 모두 성공해야 유의미하다. 중간에 하나라도 실패하면 롤백한다. (모두 성공 혹은 모두 실패)
Consistency(일관성)- 만일 DB에 걸어둔 제약이나 조건을 트랜잭션의 과정에서 위반한 경우 롤백하여 조건들을 만족하는 상태로 유지시켜야한다. 이런 규칙들을 일관성 있게 유지하도록 DBMS가 확인해 준다.
Isolation(독립성)- 트랜잭션이 실행될 때는 독립적으로 일어나야 한다. 트랜젝셔이 동시에 발생하면 결과값이 예상값과 다를 수 있다. 하지만 너무 엄격하게 구현하면 효율이 떨어지므로 isolation level을 설정하여 구현한다. level이 높을수록 효율이 떨어지지만, 엄격한 구현으로 정확도를 높인다. 레벨 설정은 개발자의 몫이다.
Durability(영속성)- 커밋된 트랜잭션은 DB에 영구적으로 저장된다. DB 프로세스가 갑자기 다운되어도 여전히 DB에 남아있다.