DB의 상태를 하나의 일관된 상태에서 또 다른 일관된 상태로 변환시켜주는 일련의 논리적 연산의 집합
트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 액세스하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용합니다.
트랜잭션은 수행 중에 한 작업이라도 실패하면 전부 실패하고, 모두 성공해야 성공이라고 할 수 있습니다.
크게 무결성을 보장하기 위한 4가지(ACID)로 구분된다.
원자성(Atomicity): 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다.
일관성(Consistency): 트랜잭션의 작업 처리결과가 항상 일관성이 있어야 한다. (ex. 데이터 타입이 정수형인데, 갑자기 문자열이 되지 않는 것)
독립성(Isolation): 둘 이상의 트랜잭션이 동시에 실행되고 있을 경우 어떤 하나의 트랜잭션도 다른 트랜잭션의 연산에 끼어들 수 없다.
지속성(Durability): 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영된다.
외부/내부 장애로 데이터베이스가 일관성을 유지하지 못할 때 이를 유지하기 위한 방법
잠금(Locking)은 하나의 트랜잭션이 실행되는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusive) 기능을 제공하는 기법입니다.
하나의 트랜잭션이 데이터 항목에 대해 잠금(lock)을 설정하면, 잠금을 설정한 트랜잭션이 해제(unlock)할 때까지 데이터를 독점적으로 사용할 수 있습니다.
단, 데이터가 많은 경우 교착상태에 빠질 수 있음
[참고]
https://coding-factory.tistory.com/226
https://hyeri0903.tistory.com/169