제 4절. TCL (Transaction Control Language)

1. 트랜잭션 개요

트랜잭션이란?

데이터베이스의 논리적 연산단위이다.
분할할 수 없는 최소 단위의 데이터베이스 조작이다.
최소 단위 이므로 ALL or NOTHING 의 개념이다.

트랜잭션 명령

  • COMMIT : 연산이 올바르게 반영된 데이터를 데이터베이스에 반영시킨다.
  • ROLLBACK : 트랜잭션 이전의 상태로 되돌린다.

트랜잭션의 특성

  • 원자성 : 트랜잭션의 연산이 모두 실행되거나 아니면 전혀 실행되지 않은 상태로 남아야한다. ALL or NOTHING
  • 일관성 : 데이터베이스 내용이 정상적이라면 트랜잭션이 실행된 이후에도 데이터베이스의 내용은 정상이어야 한다.
  • 고립성 : 트랜잭션이 실행되는 도중 다른 트랜잭션의 영향을 받지 않는다.
  • 지속성 : 트랜잭션이 성공적으로 수행되면, 그 결과는 데이터베이스에 영구적으로 저장된다.

트랜잭션의 특성을 충족시키기 위해 데이터베이스는 다양한 레벨의 잠금기능(LOCKING)을 제공한다.
잠금이 걸린 데이터는 잠금을 수행한 트랜잭션만이 해제할 수 있다.

2. COMMIT

트랜잭션을 완료하는 명령어.

  • COMMIT 이전
    DML로 데이터를 변경하는 것은 단지 메모리 버퍼에만 영향을 준것이므로 데이터 변경 이전의 상태로 복구할 수 있다.
    변경한 행은 잠금(LOCKING)되어서 다른 사용자가 변경할 수 없다.

  • COMMIT 이후
    데이터에 대한 변경 사항이 데이터베이스에 반영된다.
    이전 데이터는 영원히 잃어버리게 된다.
    모든 사용자가 결과를 볼 수 있다.

cf) ORACLE의 경우 DML 실행 시 COMMIT을 수행해줘야 DB에 반영된다.
반면, SQL SERVER는 기본적으로 모두 AUTO COMMIT이다.

데이터베이스를 정상적으로 접속 종료하면, 자동으로 트랜잭션이 커밋된다.

3. ROLLBACK

COMMIT 이전에 DML로 변경한 사항을 취소한다.
롤백을 하면 변경 사항이 취소되면서 조작한 행에 대한 잠금이 풀리고 다른 사용자들이 데이터를 변경할 수 있게 된다.

cf) SQL SERVER는 기본으로 AUTO COMMIT되므로, 롤백을 하려면 명시적으로 트랜잭션을 선언해야 한다.

COMMIT과 ROLLBACK의 효과

  • 데이터 무결성 보장
  • 논리적으로 연관된 작업을 그룹핑하여 처리 가능

4. SAVEPOINT

저장점을 정의하면 현 시점을 기준으로 특정시점(SAVEPOINT)까지 트랜잭션의 일부만 롤백할 수 있다.

SAVEPOINT SVP1;

ROLLBACK TO SVP1;

SQL SERVER의 경우, SAVE TRANSACTION 을 사용하여 동일한 기능을 수행한다.

SAVE TRANSACTION SVTR1;

ROLLBACK TRANSACTION SVTR1;

INSERT작업, SAVEPOINT1, UPDATE작업, SAVEPOINT2, DELETE, 현 시점 순으로 작업했을때,
SAVEPOINT1로 돌아간 후에, SAVEPOINT2로 (미래 방향으로) 돌릴 수는 없다.

왜냐하면 SAVEPOINT1으로 실행한 시점에는 SAVEPOINT2 저장점이 존재하지 않기 때문이다.

728x90

'프로그래밍 > SQLD' 카테고리의 다른 글

SQL 기본 5 : 함수  (0) 2020.05.27
SQL 기본 4 : WHERE 절  (0) 2020.05.27
SQL 기본 2 : DML  (0) 2020.05.27
SQL 기본 1 : RDB 개요, DDL  (0) 2020.05.27
Toad TNS file 검증 에러  (0) 2020.02.21

+ Recent posts