SQL/SQLD

#24 TCL

sundori 2025. 4. 16. 21:15

목차

    ✅ TCL (Transaction Control Language) – 트랜잭션 제어어

    TCL은 말 그대로 트랜잭션을 제어하는 SQL 명령어 모음이다.

    즉, 데이터 조작 작업(INSERT, UPDATE, DELETE 등)을 확정(commit)하거나 취소(rollback)하거나, 중간 저장점(savepoint)을 관리할 수 있다.


    ✅트랜잭션이란?

    데이터베이스에서 하나의 논리적 작업 단위로 묶인 연산들을 의미한다.

    예를들어 "A 계좌에서 10만 원 출금 → B 계좌로 입금"은 하나의 트랜잭션이다.

    출금만 되고 입금이 안되거나 출금은 되지 않았는데 입금이 된다면 상상만해도 끔찍하다..

    즉, 출금 → 입금은 반드시 모두 성공하거나, 전부 실패해야 하는 하나의 묶음인 것.

     

    원자성 트랜잭션으로 묶인 작업은 모두 성공하거나 모두 실패해야 한다. 하나라도 실패하면 전체 롤백
    일관성 트랜잭션이 완료된 후에는 항상 데이터 무결성이 유지되어야 한다
    고립성 동시에 여러 트랜잭션이 실행되더라도 서로의 실행 결과에 영향을 주지 않아야 한다
    지속성 트랜잭션이 성공적으로 완료되면 그 변경은 영구적으로 저장되어야 한다

    따라서 트랜잭션은 위의 4가지 특성을 가지고 있다.


    COMMIT - 변경사항을 영구 저장

    INSERT, DELETE, UPDATE 후 변경된 내용을 확정 저장할 때 사용하는 TCL이다.

    COMMIT을 실행하지 않으면 변경 사항은 임시 상태(메모리)에만 존재하며, 다른 사용자에게는 보이지 않고 ROLLBACK으로 취소도 가능하다. 하지만 COMMIT을 실행하는 순간, 변경 사항은 데이터베이스에 완전히 반영되고, 다시는 취소할 수 없다.

    UPDATE students SET score = 100 WHERE name = '지수';
    COMMIT;

     

    설명:

    • 트랜잭션에서 실행된 변경 내용을 데이터베이스에 확정 저장한다.
    • COMMIT을 실행하면 이후 ROLLBACK으로 복구할 수 없다.
    • 예를 들어 은행 시스템에서 출금 후 입금까지 성공했을 때 COMMIT함.

     

    ROLLBACK - 변경사항 취소 (되돌리기)

    ROLLBACK은 COMMIT 전까지 수행된 모든 변경 작업을 취소할 때 사용하는 명령어이다.

    실수로 데이터를 삭제하거나 잘못 수정했을 경우 트랜잭션 단위로 되돌릴 수 있어 유용하다.

    DELETE FROM students
    WHERE score < 60;
    
    ROLLBACK;

     

    설명:

    • COMMIT 전이면 전체 변경 작업을 취소하고 원래 상태로 되돌림
    • 실수한 UPDATE/DELETE를 되돌릴 때 유용
    • 자동으로 실행되지 않으며, 명시적으로 호출해야 함

    SAVEPOINT - 중간 저장점 설정

    트랜잭션 도중 특정 시점까지는 살리고, 이후 작업만 취소하고 싶을 때 사용하는 명령어다.

    SAVEPOINT를 사용하면 부분적으로 되돌리는 ROLLBACK이 가능하다.

    SAVEPOINT sp1;
    
    UPDATE students
    SET score = 95
    WHERE name = '지수';
    
    DELETE FROM students
    WHERE score < 80;

     

    설명:

    • SAVEPOINT sp1은 현재까지의 상태를 저장함
    • 이후 작업이 잘못되었을 경우, 해당 저장점까지만 ROLLBACK 가능

    ROLLBACK TO - 저장점으로 부분 취소

    ROLLBACK TO 저장점은 전체 작업이 아닌, 지정한 저장점 이후 작업만 되돌릴 수 있는 명령어이다.

    복잡한 트랜잭션에서 실수한 부분만 취소하고 나머지는 유지하고 싶을 때 유용하다.

    ROLLBACK TO sp1;

     

    설명:

    • 저장점 sp1 이후의 모든 작업만 취소되고,
      sp1 이전 작업은 그대로 유지됨
    • 부분 ROLLBACK을 통해 세밀한 트랜잭션 제어 가능
    728x90

    'SQL > SQLD' 카테고리의 다른 글

    #26 DCL  (0) 2025.04.17
    #25 DDL  (0) 2025.04.16
    #23 DML  (0) 2025.04.15
    #22 계층 쿼리  (0) 2025.04.15
    #20 Top-N 쿼리  (0) 2025.04.15