국비 24-1

냐아암·2023년 5월 19일
0

국비

목록 보기
35/114

TCL(TRANSACTION CONTROL LANGUAGE)

  • TRANSACTION: 데이터베이스 논리적 연산 단위
    데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리

  • COMMIT : 메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 DB에 반영

  • ROLLBACK: 메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 삭제하고 마지막 커밋 상태로 돌아감

  • SAVEPOINT: 메모리 버퍼(트랜잭션)에 저장 지점을 정의하여 ROLLBACK 수행 시 전체 작업을 삭제하는 것이 아닌 저장 지점까지만 일부 ROLLBACK


06_TCL

-- TCL(TRANSACTION CONTROL LANGUAGE) : 트랜잭션 제어 언어
-- COMMIT(트랜잭션 종료 후 저장), ROLLBACK(트랜잭션 취소), SAVEPOINT(임시 저장)

-- DML: 데이터 조작 언어로 데이터의 삽입, 수정, 삭제
--> 트랜잭션은 DML과 관련되어 있음

/*TRANSACTION 이란?
- 데이터베이스의 논리적 연산 단위

- 데이터 변경 사항을 묶어 하나의 트랜잭션에 담아 처리함

- 트랜잭션의 대상이 되는 데이터 변경 사항: INSERT, UPDATE, DELETE (DML)

EX) INSERT 수행 ----------------------------------------------> DB 반영(X)

    INSERT 수행 --------> 트랜잭션 추가 --------> COMMIT --------> DB 반영(O)

    INSERT 10번 수행 --> 1개의 트랜잭션에 10개 추가 --> ROLLBACK --> DB 반영(X)

    1) COMMIT: 메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 DB에 반영
    
    2) ROLLBACK: 메모리 버퍼(트랜잭션)에 임시 저장된 데이터 변경 사항을 삭제하고
                 마지막 커밋 상태로 돌아감
    3) SAVEPOINT: 메모리 버퍼(트랜잭션)에 저장 지점을 정의하여
                  ROLLBACK 수행 시 전체 작업을 삭제하는 것이 아닌
                  저장 지점까지만 일부 ROLLBACK
                  
    [SAVEPOINT 사용법]
    
    SAVEPOINT 포인트명1;
    ...
    SAVEPOINT 포인트명2;
    ...
    ROLLBACK TO 포인트명1; -- 포인트1 지점까지 데이터 변경사항 삭제

*/

-- CREATE TABLE DEPARTMENT2 AS SELECT * FROM DEPARTMENT;

-- DEPARTMENT2 테이블 현재 상태 확인
SELECT * FROM DEPARTMENT2;

-- D0, 경리부, L2 삽입
INSERT INTO DEPARTMENT2  VALUES ('D0', '경리부', 'L2');
-- INSERT INTO DEPARTMENT2 (DEPT_ID, DEPT_TITLE, LOCATION_ID) VALUES ('D0', '경리부', 'L2');

SELECT * FROM DEPARTMENT2;

ROLLBACK;

-- 롤백 후 다시 확인
SELECT * FROM DEPARTMENT2;

-- 다시 INSERT 후 COMMIT
INSERT INTO DEPARTMENT2  VALUES ('D0', '경리부', 'L2');
COMMIT;

-- ROLLBACK 수행 후 경리부 삭제되었는지 확인
ROLLBACK;
SELECT * FROM DEPARTMENT2;

---------------------------------------------------------------------------------

DELETE FROM DEPARTMENT2 WHERE DEPT_ID='D0';

-- D0 삭제 시점에 SAVEPOINT 지정
SAVEPOINT SP1; -- SAVEPOINT(가) 생성되었습니다

-- D9 삭제
DELETE FROM DEPARTMENT2 WHERE DEPT_ID = 'D9';
SELECT * FROM DEPARTMENT2;

-- 일반 ROLLBACK 시 D9, D0 복구됨
ROLLBACK;
SELECT * FROM DEPARTMENT2;

-- SP1까지 ROLLBACK
--(다시 처음부터 행 추가 후 실습)

-- D0 삭제
DELETE FROM DEPARTMENT2 WHERE DEPT_ID='D0';

-- D0 삭제 시점에 SAVEPOINT 지정
SAVEPOINT SP1; -- SAVEPOINT(가) 생성되었습니다

-- D9 삭제
DELETE FROM DEPARTMENT2 WHERE DEPT_ID = 'D9';
SELECT * FROM DEPARTMENT2;

-- SP1 롤백
ROLLBACK TO SP1;
SELECT * FROM DEPARTMENT2;

-- 그냥 롤백 -> COMMIT 시점으로 돌아감
ROLLBACK;
SELECT * FROM DEPARTMENT2;
profile
개발 일지

0개의 댓글