*SQL_Oracle*

TCL < COMMIT, ROLLBACK >

깐부로부터 2021. 11. 11. 20:18

TCL : TARNSACTION CONTROL LANGUAGE

트랜잭션을 제어하는 언어

 

* 트랜잭션 (TRANSACTION)
  - 데이터베이스의 논리적 연산단위

 

- 데이터의 변경사항 (DML)들을 하나의 트랜잭션에 묶어서 처리
  COMMIT(확정)하기 전까지는 변경사항들을 하나의 트랜잭션에 담게 됨

- 트랜잭션의 대상이 되는 SQL : INSERT, UPDATE, DELETE

 

  • COMMIT (트랜잭션 종료처리 후 확정)
  • ROLLBACK (트랜잭션 취소)
  • SAVEPOINT (임시저장)

 

COMMIT; 진행 : 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영하겠다.
                     실제 반영시킨 후 트랜잭션은 비워짐


ROLLABCK; : 하나의 트랜잭션에 담겨있는 변경사항들을 삭제한 후 마지막 COMMIT 시점으로 돌아감
                
SAVEPOINT 이름; : 지금 시점 임시저장점 정의
        
ROLLBACK 이름; : 해당 임시저장점으로 트랜잭션을 롤백함

 

 

사번 203번, 송은희가 삭제된것을 볼 수 있다.
다시 롤백

롤백후에 다시 컬럼을 조회해보면 송은희가 있다.

 

 

BUT,

 

홍길동 사원을 추가하고

 

COMMIT; 후에 ROLLBACK;을 해도 홍길동이 추가되기전 테이블로 되돌아가지 않는다.

 


SAVEPIONT

 

사번이 214, 216, 217인 사원정보를 삭제하고

SAVEPIONT로 SP1 이름을 지어줘서 저장을 한다.

그 후에 사번 200인 사원을 삭제하고 홍길동사원을 추가한다음 SP1으로 롤백을 하면,

사번 200인 사원의 정보는 그대로 있고, 홍길동직원은 추가 되지 않았다.

SAVEPIONT SP1 시점으로 사번 217, 216, 214 정보만이 삭제된 테이블만 보이게 된다.

 


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

 

 

사번 800번인 사원의 정보를 삭제하고

DDL인 CREATE TABLE을 실행한다.

그 후에 ROLLBACK을 실행하고 테이블 EMP_02를 조회하면

사번 800번인 사원의 정보가 돌아와있지않고 그대로 삭제되어 있다.

 

'*SQL_Oracle*' 카테고리의 다른 글

OBJECT < VIEW > 옵션  (0) 2021.11.12
OBJECT < VIEW >  (0) 2021.11.11
DCL < GRANT, REVOKE>  (0) 2021.11.11
DDL < ALTER, DROP >  (0) 2021.11.11
DML <INSERT, UPDATE, DELETE>  (0) 2021.11.11