DBMS에서 데이터를 다루는 논리적인 작업의 단위
원자성(Atomicity)
트랜잭션에 포함된 작업은 전부 수행되거나 아니면 전부 수행되지 않아야 함.
일관성(Consistency)
트랜잭션을 수행하기 전이나 수행한 후나 데이터베이스는 항상 일관된 상태를 유지해야 함.
고립성(Isolation)
수행 중인 트랜잭션에 다른 트랜잭션이 끼어 들어 변경 중인 데이터 값을 훼손하는 일이 없어야 함.
지속성(Durability)
수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 함.
🔺 원자성
-트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다는 의미.
-일부만 수행되는 일이 없도록 전부 수행하거나 아예 수행하지 않아야 함.
🔺 일관성
-트랜잭션은 DB이 일관성을 유지해야 함.
-일관성은 테이블 생성 시 CREATE 문과 ALTER 문의 무곃성 제약조건을 통해 명시.
DB 변경 중과 변경 후의 일관성
🔺 고립성
-DB는 공유가 목적이므로 여러 트랜잭션이 동시에 수행됨
-동시에 수행되는 트랜잭션은 상호 존재를 모르고 독립적으로 수행 -> 고립성
-고립성을 유지하기 위해서는 트랜잭션이 변경 중인 임시 데이터를 다른 트랜잭션이 읽고 쓸 때 제어가 필요
트랜잭션의 동시 수행과 데이터 공유
🔺 지속성
트랜잭션이 정상적으로 완료(commit) 혹은 부분완료한 데이터는 DBMS가 책임지고 데이터 베이스에 기록하는 성질
트랜잭션의 상태도
- 갱신손실(lost, update)
두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생
데이터베이스에서 절대 발생하면 안 되는 현상
락을 이용한 갱신손실 문제 해결
언락 했다가 락 해주고 해야함!!
🔺 2단계 락킹
락을 걸고 해제하는 시점에 제한을 두지 않으면 두 개의 트랜잭션이 동시에 실행될 때 데이터의 일관성이 깨질 수 있어 이를 방지하는 방법.
🔺 데드락
두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상. 교착상태라고도 함.
읽기 작업을 하는 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽기 때문에 생기는 문제
트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(갱신, UPDATE) 트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제
트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고(삽입,INSERT) 트랜잭션 1이 다시 한 번 데이터를 읽을 때 생기는 문제