트랜잭션
- 데이터베이스의 상태를 변화시키는 하나 이상의 SQL 작업들의 논리적인 집합, 모든 작업들이 성공적으로 완료(COMMIT)되거나 모두 취소(ROLLBACK)되어야함.
- 데이터 무결성과 일관성을 유지하기 위함
ACID 특성
1. 원자성(Atomicity)
- 트랜잭션의 모든 작업이 모두 성공하거나 모두 실패해야함. 모든 작업이 하나의 단위로 간주됨
- 예시 : 은행 계좌 이체 중 A에서 B 계좌로 돈을 이체하는 트랜잭션이 있따면 돈을 출금하고 입금하는 두 작업이 모두 성공하거나 모두 실패햐야함.
2. 일관성(Consistency)
- 트랜잭션이 완료된 후 데이터베이스과 일관된 상태를 유지해야함. 트랜잭션 전후의 데이터베이스 상태는 정의된 규칙을 따름
- 예시 : 은행 계좌에서 트랜잭션이 완료된 후 총 계좌 잔액이 변하지 않아야함.
3. 고립성(Isolation)
- 동시에 실행되는 트랜잭션들이 서로의 작업에 영향을 미치지 않도록 독립적으로 수행되어야함. 다른 트랜잭션의 중간 결과를 볼 수 없음.
- 예시 : 두 트랜잭션이 동시에 같은 데이터를 수정하려고 할 때, 각 트랜잭션은 다른 트랜잭션이 완료될 때까지 기다려야함.
4. 지속성(Durability)
- 트랜잭션이 성공적으로 완료된 후에는 시스템 오류가 발생하더라도 데이터베이스에 영구적으로 반영되어야함.
- 예시 : 트랜잭션이 완료된 후 시스템이 다운되더라도 완료된 트랜잭션의 결과는 데이터베이스에 남아있어야함.
트랜잭션 격리 수준(Isolation Levels)
각 격리 수준은 고립성과 성능 간의 균형을 달리함.
1. Read Uncommitted
- 트랜잭션이 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있음.
- 문제점 : Dirty Dead 발생 가능
- 예시 : 트랜잭션 A가 데이터를 수정 중일 때, 트랜잭션 B가 수정중인 데이터를 읽을 수 있음.
2. Read Commited
- 트랜잭션이 커밋된 데이터만 다른 트랜잭션이 읽을 수 있음.
- 문제점 : Non-repeatable Read 발생 가능
- 트랜잭션 A가 데이터를 수정하고 커밋한 후 트랜잭션 B가 데이터를 읽음
3. Repeatbale Read
- 트랜잭션이 데이터를 읽을 때 트랜잭션이 완료될 때까지 다른 트랜잭션이 해당 데이터를 수정할 수 없음
- 문제점 : Phantom Read 밠생 가능
- 트랜잭션 A가 데이터를 읽은 후 트랜잭션 B가 데이터를 수정하지 못하지만 새로운 데이터를 삽입할 수 있음.
4. Serializable
- 가장 높은 수준의 고립성으로 모든 트랜잭션이 직렬적으로 실행된 것처럼 보임.
- 문제점 : 성능 저하
- 예시 : 트랜잭션 A와 B가 동시에 실행되면 하나는 다른 하나가 완료될 때까지 기다려야함.
트랜잭션 제어 명령어
- BEGIN TRANSACTION : 트랜잭션 시작
- COMMIT : 트랜잭션 내 모든 작업을 데이터베이스에 영구적으로 반영함
- ROLLBACK : 트랜잭션 내의 모든 작업을 취소하고 데이터베이스 상태를 트랜잭션 시작 이전으로 되돌림.
'CS 공부 > DB' 카테고리의 다른 글
[DB] NoSQL 특성과 RDBMS와의 차이점 (0) | 2024.10.22 |
---|---|
[DB] 오라클 자주 쓰는 내장함수 모음(코테 대비) (0) | 2024.10.21 |
[DB] 1~3정규화 (0) | 2024.07.11 |
[DB] 데이터 무결성 (0) | 2024.07.11 |
[DB] 제 2정규화 (0) | 2024.07.10 |