CS 공부/DB

[DB] 트랜잭션(ACID와 격리수준)

양쏘쏘 2024. 7. 22. 14:41
728x90
반응형

트랜잭션

- 데이터베이스의 상태를 변화시키는 하나 이상의 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 : 트랜잭션 내의 모든 작업을 취소하고 데이터베이스 상태를 트랜잭션 시작 이전으로 되돌림.

728x90

'CS 공부 > DB' 카테고리의 다른 글

[DB] 1~3정규화  (0) 2024.07.11
[DB] 데이터 무결성  (0) 2024.07.11
[DB] 제 2정규화  (0) 2024.07.10
[DB] 제 1 정규화  (0) 2024.05.24