ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCL
    DB/SQL 2024. 7. 8. 19:41
    /*
    TCL (TRANSACTION CONTROL LANGUAGE) : 트랜잭션 제어 언어
    
    Transaction : 업무, 처리
    
    변경된 사항을 묶어서 하나의 트랜잭션에 처리
    
    트랜잭션에서 데이터 변경 대상 : INSERT, UPDATE, DELETE (DML)
    
    Ex) 
        INSERT INTO 값 추가 ---------------------------------> DB 반영 X
        INSERT INTO 값 추가 -----트랜잭션에 추가-------COMMIT---> DB 반영 O
        INSERT INTO 10 번 값 추가 ---> 1 개 트랜잭션에 10 개 추가 -- ROLLBACK ---> DB 반영 X
        
        1) COMMIT : 메모리 트랜잭션에 임시 저장된 데이터를 DB 에 완전히 추가
        
        2) ROLLBACK : 메모리 트랜잭션에 임시 저장된 데이터를 삭제하고 
                      마지막 COMMIT 상태로 돌아감
        
        3) SAVEPOINT : 메모리 트랜잭션에 저장 지점을 정의 
                       ROLLBACK 을 수행할 경우 전체 작업을 삭제하는 것이 아닌
                       저장 지점까지만 일부 ROLLBACK
        
        
    */
    
    -- 복제 테이블 DEPARTMENT3 
    CREATE TABLE DEPARTMENT3 AS SELECT * FROM DEPARTMENT;
    
    SELECT * FROM DEPARTMENT3;
    
    -- 1) COMMIT 예제
    ---> D0 경리부 L2 삽입
    INSERT INTO DEPARTMENT3 
    VALUES ('D0','경리부','L2');
    
    SELECT * FROM DEPARTMENT3;
    ---> D9 인 부서의 이름과 지역코드를 전략기획팀 L3 수정
    UPDATE DEPARTMENT3
    SET DEPT_TITLE = '전략기획팀',
        LOCATION_ID = 'L3'
    WHERE DEPT_ID = 'D9';
    
    SELECT * FROM DEPARTMENT3;
    -- 추가와 수정된 사항들을 최종 저장
    COMMIT; -- 완벽하게 저장완료
    
    ROLLBACK; -- 완벽하게 저장이 된 상태에서 돌아가기를 진행하면
    -- 커밋이 완료된 시점으로 돌아감
    
    SELECT * FROM DEPARTMENT3;
    
    
    -- 2) ROLLBACK 예제
    --- DEPT_ID D0 인 행을 삭제
    DELETE FROM DEPARTMENT3
    WHERE DEPT_ID = 'D0';
    
    SELECT * FROM DEPARTMENT3;
    
    ---- DELETE DEPT_ID D9 인 행을 삭제
    DELETE FROM DEPARTMENT3
    WHERE DEPT_ID = 'D9';
    
    -- DEPT_ID D8 인 행을 삭제, 삭제한 내역 되돌리기
    DELETE FROM DEPARTMENT3
    WHERE DEPT_ID = 'D8';
    
    ROLLBACK; -- 마지막 커밋 이후의 것들을 없앰
    
    
    -- 3) SAVEPOINT 예제
    --- SAVEPOINT 작성해준 후 저장지점 이름 설정
    
    -- DEPT_ID 가 D0 인 행을 삭제
    
    DELETE FROM DEPARTMENT3
    WHERE DEPT_ID = 'D0';
    
    SAVEPOINT "SP1"; -- SP1 이라는 저장 지점 설정
    
    -- DEPT_ID 가 D9 인 행을 삭제
    DELETE FROM DEPARTMENT3
    WHERE DEPT_ID = 'D9';
    
    SAVEPOINT "AAA"; -- AAA 라는 저장 지점 설정
    
    -- DEPARTMENT3 전체삭제
    DELETE FROM DEPARTMENT3;
    
    SELECT * FROM DEPARTMENT3; -- 실수로 전체 삭제
    
    ROLLBACK;
    -- AAA 까지 돌아가고싶다
    ROLLBACK TO "AAA"; --- AAA 시점으로 저장된 DB 내역이 돌아옴
    
    -- SP1 까지 되돌리기
    ROLLBACK TO "SP1";
    
    SELECT * FROM DEPARTMENT3;
    
    -- 모든 내역 SP1 이전으로 되돌리기
    ROLLBACK;

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

    DDL(ALTER_DROP)  (0) 2024.07.10
    조건문  (0) 2024.07.09
    SUBQUERY  (0) 2024.07.05
    JOIN  (0) 2024.07.04
    GROUPBY절, HAVING절  (5) 2024.07.03
Designed by Tistory.