트랜잭션
트랜젝션은 한 개 이상의 SQL문으로 이루어진 하나의 논리적 기능을 수행하기 위한 작업 단위로 작업의 안정성을 보장해준다. 즉 논리적인 작업을 모두 완벽하게 처리하지 못 할 경우에는 원 상태로 복구하여 일부만 적용 되는 현상이 발생하지 않게 만들어준다.
트랜잭션 4가지 특성(ACID)
- 원자성(Atomicity) : 트랜잭션의 연산은 모두 반영되거나(ALL), 전혀 반영 되지 않아야 한다.(NOTHING)
- 일관성(Consistency) : 트랜잭션 실행 후 데이터베이스의 무결성은 유지 되어야 된다.
- 격리성,독립성(Isolation) : 트랜잭션 실행 중에는 다른 트랜잭션이 접근할 수 없다.
- 영속성(Durability) : 트랜잭션의 결과는 계속 유지 되어야 된다.(트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다.)
트랜잭션 제어 명령어 :TCL(Transaction Control Language)
트랜잭션에 묶여있는 DML의 수행 상태는
1. 모든 명령어가 정상적으로 수행 완료된 상태
2. 모든 명령어가 수행 되지 않아 취소된 상태
두가지로만 존재할 수 있다. 데이터 조작을 데이터베이스에 영구적으러 반영하거나 작업 전체를 취소한다.
COMMIT ROLLBACK 이전의 상태
- 메모리 버퍼에만 영향을 받았기 때문에 데이터의 변경 이전 상태로 복구가 가능하다.
- 현재 사용자는 SELECT 문으로 결과를 확인 가능하다.
- 다른 사용자는 현재 사용자가 수행한 명령의 결과를 볼 수 없다.
- 변경된 행은 잠금이 설정 되어 다른 사람이 동시에 변경할 수 없다.
COMMIT
입력한 자료나 수정한 자료 또는 삭제한 자료에 대해 전혀 문제가 없다고 판단 되었을 때 COMMIT 명령어를 통해 트랜잭션을 완료한다.
COMMIT 이후의 상태
- 데이터에 대한 변경 사항이 데이터베이스에 반영된다.
- 이전 데이터는 영원히 잃어버리게 된다.
- 모든 사용자가 결과를 볼 수 있다.
- 관련 된 행에 대한 잠금이 풀리고, 다른 사용자들도 해당 행을 조작할 수 있다.
ROLLBACK
작업 중 문제가 발생 할 경우 ROLLBACK를 사용하면 데이터 변경 사항이 취소되어 데이터가 이전 상태로 복구되며(트랜잭션이 시작하기 이전의 상태로 되돌아간다.) 마지막 COMMIT을 완료한 시점으로 돌아간다.
ROLLBACK 이후의 상태
- 데이터에 대한 변경 사항이 취소된다.
- 이전 데이터는 다시 재저장된다.
- 관련 된 행에 대한 잠금이 풀리고, 다른 사용자들도 해당 행을 조작할 수 있다.
🙇 참고 사이트 🙇
https://infjin.tistory.com/137 https://nanarin.tistory.com/270 https://mozi.tistory.com/209