Meme's IT

[SQLD] TCL(Transaction Control Language) 본문

공부/SQLD

[SQLD] TCL(Transaction Control Language)

Memez 2023. 10. 30. 19:00

들어가기전에,,,

# 트랜잭션 이란?

DB의 논리적 연산 단위, 하나 이상의 SQL문을 포함

  • 원자성(Atomicity): 전부 실행되거나 전혀 실행되지 않음(All or Nothing)
  • 일관성(Consistency): 트랜잭션으로 인한 DB 상태의 모순이 없음
  • 고립성(Isolation): 부분적인 실행 결과에 다른 트랜잭션이 접근할 수 없음, LOCKING으로 고립성 보장
  • 영속성(Durability): 트랜잭션의 결과는 영구적으로 저장됨

 

# TCL

데이터 무결성 보장이 목적임

1) 영구 변경 전 확인

2) 연관 작업 동시 처리 가능

  • Oracle에서는 1) SQL 문을 실행하면 트랜잭션이 시작되고 2) TCL을 실행하면 트랜잭션이 종료됨
  • DDL를 실행하면 자동으로 커밋 (DML 이후 커밋 없이 DDL을 실행해도 자동 커밋)
  • DB를 정상적으로 종료하면 자동 커밋, 정상적인 종료가 아니라면 자동 롤백

 

 

 

근데 여기서 커밋이 뭔데?

# COMMIT

데이터를 DB에 영구적으로 반영하는 명령어

커밋 시 트랜잭션이 완료되어 LOCKING이 해제된다

 

❎ 커밋 전

  • 데이터 변경이 메모리 버퍼에만 영향을 받음 → 복구 가능
  • 사용자는 SELECT절로 결과를 확인할 수 있으나 다른 사용자는 불가능
  • 변경된 행에 LOCKING이 설정되어 다른 사용자가 변경할 수 없음

✅ 커밋 후

  • 변경 사항이 DB에 반영되고 이전 데이터는 복구 불가!!!
  • 모든 사용자가 결과를 볼 수 있음
  • LOCKING이 해제되어 다른 사용자가 행을 조작할 수 있음

 

 

# ROLLBACK

트랜잭션 시작 이전의 상태로 되돌리는 명령어 = COMMIT 이전의 상태로 돌려줌

ROLLBACK 시 LOCKING이 해제

 

  • SAVEPOINT(저장점): 트랜잭션 일부만 롤백 할 수 있도록 중간상태를 저장, 동일한 이름이 있다면 나중에 있는 것이 유효
ROLLBACK TO 저장점
  • SQL 서버에서는 BEGIN TRAN으로 명시해야 가능함

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

[SQLD] 집계함수(GROUP BY, HAVING 등)  (0) 2023.10.31
[SQLD] WHERE절과 연산자  (0) 2023.10.30
[SQLD] DML(Data Manipulation Language)  (0) 2023.10.30
[SQLD] DDL(Data Definition Language)  (0) 2023.10.30
[SQLD] 관계형 DB  (0) 2023.10.30