-> 블로그 이전

[SQLD] 2-4. TCL

2021. 10. 29. 20:39Certificate`/SQLD

TCL (트랜잭션 제어어)

트랜잭션

  • DB의 논리적 연산 단위
  • 분리될 수 없는 1개 이상의 DB 조작 / 분할할 수 없는 최소의 단위
  • 하나의 트랜잭션에는 하나 이상의 SQL문 포함
  • All Or Nothing (전부 적용 or 전부 취소)

트랜잭션 특성 (ACID / 원-일-고-지)

특성 설명
원자성
(Atomicity)
● 트랜잭션에서 정의된 연산들은 모두 성공하거나 전혀 실행되지 않은 상태여야 한다 
(All Or Nothing)
일관성
(Consistency)
● 트랜잭션이 실행되기 전의 DB 내용이 잘못 되어 있지 않다면
트랜잭션이 실행된 이후에도 DB의 내용은 잘못이 없어야 한다
고립성
(Isolation)
● 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들면 안된다
지속성
(Durability)
● 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 DB의 내용은 영구적으로 저장된다

 

COMMIT (저장)

commit;

- 입력/수정/삭제한 자료에 대해 전혀 문제가 없을 경우, commit을 통해 트랜잭션 완료

- DML(Insert, Update, Delete)를 사용한 후 변경 작업이 완료되었음을 DB에 알려주기 위해 사용한다

 

Commit 이전

  • 메모리 Buffer에만 영향을 받았기 때문에 데이터 변경 이전으로 복구 가능하다
  • 현재 사용자는 SELECT를 통해 결과 확인이 가능하다
  • 다른 사용자는 결과를 볼 수 없다
  • 변경된 행은 Locking이 설정되어서 다른 사용자가 변경할 수 없다

Commit 이후

  • 변경사항이 DB에 반영된다
  • 이전 데이터는 영구히 없어진다
  • 모든 사용자가 결과를 볼 수 있다
  • 관련 행에 대해 Locking이 풀리고, 다른 사용자들이 행을 조작할 수 있다

 

ROLLBACK (복구)

rollback;

- 테이블 내 입력/수정/삭제한 데이터에 대해 변경 사항이 취소되고 이전 데이터가 다시 저장된다

- 관련된 행에 대한 Locking이 풀리고, 다른 사용자들이 데이터를 변경할 수 있다

- commit한 상태까지로 rollback된다

 

※ SQL Server에서의 ROLLBACK

- Auto Commit이기 때문에, 명시적으로 트랜잭션을 선언해야 한다.

BEGIN TRAN
INSERT ~
UPDATE ~
DELETE ~;

ROLLBACK;

 

※Commit, Rollback의 효과

- 데이터 무결성 보장

- 영구적 변경을 하기 전에 데이터의 변경 사항 확인 가능

- 논리적으로 연관된 작업을 그룹핑하여 처리 가능

 

 

 

SAVEPOINT (구간 저장)

SAVEPOINT SVPT1;
INSERT ~
DELETE ~

SAVEPOINT SVPT2;
UPDATE ~
INSERT ~

ROLLBACK TO SVPT2; / ROLLBACK TO SVPT1;