트랜잭션
트랜잭션
- 데이터베이스에서 하나의 논리적 작업 단위를 의미
- 여러 개의 작업이 하나의 트랜잭션으로 묶여, 모두 성공하거나 모두 실패하도록 보장함
- 이를 통해 데이터의 무결성과 일관성을 유지할 수 있다
트랜잭션의 4가지 특성(ACID)
- Atomicity(원자성)
- 트랜잭션 내의 모든 작업이 '완전히 수행'되거나, '전혀 수행되지 않아야' 한다
- Consistency(일관성)
- 트랜잭션이 완료된 후, 데이터베이스는 항상 일관된 상태를 유지해야한다
- 즉, 트랜잭션 실행 전 데이터베이스에 문제가 없었다면, 실행 후에도 문제가 없어야 한다
- Isolation(격리성)
- 트랜잭션은 독립적으로 수행되어야 한다
- 따라서 동시에 실행되는 트랜잭션들은 서로의 작업에 영향을 주지 않아야 한다
- Durability(지속성)
- 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 저장되어야 한다
SQL에서 트랜잭션 명령어
- BEGIN TRANSACTION
- 새로운 트랜잭션을 생성한다
- 트랜잭션을 시작하면 일종의 쓰기 잠금(Lock)이 발생하여, 다른 사용자가 데이터베이스의 데이터를 수정, 반영 하는 것을 막는다
- COMMIT
- 'commit transaction' 명령어로도 수행 가능
- [INSERT, UPDATE, DELETE] 와 같이 트랜잭션 내의 변경사항을 데이터베이스에 영구적으로 반영하고, 락을 해제하여 트랜잭션을 완료한다
- ROLLBACK
- 이전 'COMMIT' 이후의 변경사항이나, 'SAVEPOINT' 이후의 모든 변경사항을 취소하고 원래대로 되돌리며, 커밋과 마찬가지로 락이 해제된다
- 즉, 아직 COMMIT 되지 않은 '트랜잭션 내의 변경사항들'을 되돌리는 작업이다
- 일단 커밋이 완료된 사항에 대해서는 롤백이 불가능하다
- SAVEPOINT
- ROLLBACK을 하기 위한 저장점을 지정한다
- SAVEPOINT를 정의하면, 트랜잭션에 포함된 전체 작업을 ROLLBACK하는 것이 아니라 SAVEPOINT부터 변경시점까지만을 롤백한다