[Oracle] 10_TCL(COMMIT, ROLLBACK, SAVEPOINT)_KH계정

2022. 9. 3. 00:03·📗 self-study/📗 KH정보교육원 당산지원

10_TCL(COMMIT, ROLLBACK, SAVEPOINT)_KH계정

 

 

<TCL: TRANSACTION CONTROL LANGUAGE>
    트랜잭션을 제어하는 언어
    
    *트랜잭션 (TRANSACTION)
    - 데이터베이스의 논리적 연산 단위 (절대 쿼리문 한 개의 단위가 아님!)
    - 데이터의 변경사항 (DML) 들을 하나의 트랜잭션으로 묶어서 처리
        COMMIT (확정) 하기 전까지의 변경사항들을 하나의 트랜잭션에 담게 됨
    - 트랜잭션의 대상이 되는 SQL: INSERT, UPDATE, DELETE (DML)
    => 실행했을 때 뭔가가 바뀐다면 트랜잭션 대상이라고 생각하면 됨!
    
    *TCL의 종류
    COMMIT, ROLLBACK, SAVEPOINT
    
    [ 표현법] 
    - COMMIT; => 하나의 트랜잭션에 담겨 있는 변경사항들을 실제 DB에 반영하겠다를 의미함
                          실제 DB에 변경된 내용들을 반영시키고 나서 트랜잭션은 비워짐
    - ROLLBACK; => 하나의 트랜잭션에 담겨 있는 변경사항들을 실제 DB에 반영하지 않고
                            트랜잭션을 비워 주는 역할을 해 줌 (단, 마지막 COMMIT 시점까지만 비워 줌)
    - SAVEPOINT 포인트명 => 현재 이 명령어를 실행한 "시점"에서 해당 포인트명에 해당되는
                                         임시 저장점을 정의해 두는 것
    - ROLLBACK TO 포인트명; => 전체 변경사항들을 삭제하는 것이 아니라
                                              해당 포인트 지점까지의 트랜잭션만 롤백함

-- EMP_ID 테이블
SELECT * FROM EMP_01;

-- 사번이 901번인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID = '901'; --> 참고! DELETE문은 조건 생략 가능하지만 WHERE절 안 쓰면 테이블 데이터 전체가 날아감

-- 사번이 900번인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID = '900';

SELECT * FROM EMP_01;

ROLLBACK; --> 사번 900, 901번 사원 데이터가 살아남

 

-- 사번 200번인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID = 200;

-- 사번 800, 이름 홍길동, 부서는 총무부인 사원 추가
INSERT INTO EMP_01 /* (EMP_ID, EMP_NAME, DEPT_TITLE) */
VALUES (800, '홍길동', '총무부');

SELECT * FROM EMP_01;

COMMIT; -- 이때 커밋을 안 해 주면 실제 DB에 트랜잭션이 반영되지 않았기 때문에 프로그램 껐다가 켜면 200번 삭제와 800번 삽입이 이루어지지 않은 상태일 것임!

 

-- 사번이 217, 216, 214인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID IN (217, 216, 214);

-- 3개의 행이 삭제된 시점에 SAVEPOINT 지정
SAVEPOINT SP;

-- 사번 801, 이름 고영희, 부서 인사부인 사원 추가
INSERT INTO EMP_01
VALUES (801, '고영희', '인사부');

SELECT * FROM EMP_01;

-- 사번이 218인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID = 218;

-- SP 이전까지만 롤백
ROLLBACK TO SP;

SELECT * FROM EMP_01;

COMMIT;

SELECT * FROM EMP_01;

 

-- 사번이 900, 901인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID IN (900, 901);

-- 사번이 218인 사원 삭제
DELETE
FROM EMP_01
WHERE EMP_ID = 218;

-- 테이블 생성 (DDL)
CREATE TABLE TEST (
    TID NUMBER
);

SELECT * FROM EMP_01;

ROLLBACK; -- 작업 잘못함 ;; ㄱㅊㄱㅊ 롤백 하면 900, 901, 218번 사원이 살아나겠지? 희희

SELECT * FROM EMP_01; -- 안 살아남 ;;

 

  DDL 구문 (CREATE, ALTER, DROP)을 실행하는 순간
    기존의 트랜잭션에 있던 모든 변경사항들을 무조건 실제 DB에 반영 (COMMIT) 시킨 후에
    그 이후 DDL이 수행됨
    => 즉, DDL 수행 전 항상 변경사항들이 있었다면 정확히 픽스 (COMMIT, ROLLBACK) 후
         DDL을 실행해야 함

 

저작자표시 비영리 변경금지 (새창열림)
'📗 self-study/📗 KH정보교육원 당산지원' 카테고리의 다른 글
  • [Oracle] 12_OBJECT(SEQUENCE)_KH계정
  • [Oracle] 11_OBJECT(VIEW)_KH계정
  • [Oralce] 09_DCL(GRANT, REVOKE)_관리자계정, SAMPLE계정
  • [Oralce] 08_DDL(ALTER, DROP)_KH계정
천재강쥐
천재강쥐
  • 천재강쥐
    디버거도 버거다
    천재강쥐
  • 전체
    오늘
    어제
    • Category (467)
      • 진짜 너무 궁금한데 이걸 나만 몰라...? (0)
      • 💾 Portfolio (2)
      • 🐤 CodingTest (28)
        • Java (20)
        • ᕕ(ꐦ°᷄д°᷅)ᕗ❌ (5)
      • 🚀 from error to study (142)
        • AI (1)
        • Cloud (2)
        • DB (12)
        • Front-End (16)
        • Github (14)
        • Java (39)
        • Mac (7)
        • Normal (29)
        • Server (22)
      • 📘 certificate (44)
        • 📘 리눅스마스터1급 (1)
        • 📘⭕️ 정보처리기사 (40)
        • 📘⭕️ SQLD (3)
      • 📗 self-study (234)
        • 📗 inflearn (35)
        • 📗 생활코딩 (8)
        • 📗 KH정보교육원 당산지원 (190)
      • 🎨 Scoop the others (0)
        • 📖 Peeking into other people.. (0)
        • 🇫🇷 (0)
        • 📘⭕️ 한국사능력검정시험 심화 (11)
        • 오블완 (4)
  • 인기 글

  • hELLO· Designed By정상우.v4.10.1
천재강쥐
[Oracle] 10_TCL(COMMIT, ROLLBACK, SAVEPOINT)_KH계정
상단으로

티스토리툴바