Database/Oracle

[SQL]TCL - COMMIT, ROLLBACK, SAVEPOINT

Ma_Sand 2022. 3. 30. 22:14
반응형

TCL(TRANSACTION CONTROL LANGUAGE)

   : 트랜잭션을 제어하는 언어이다.

 

 (1) 트랜잭션(TRANSACTION)

   ① 데이터베이스의 논리적 작업 단위이다.

   ② 데이터의 변경사항(DML) 등을 하나의 트랜잭션으로 묶어서 처리한다.

      → 확정(COMMIT)하기 전까지의 변경사항들을 하나의 트랜잭션으로 담는다.

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

 

 

 

 (2) 트랜잭션의 종류

   ① COMMIT;

      : 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영한  후 트랜잭션은 비워진다.(확정)

   ② ROLLBACK;

      : 하나의 트랜잭션에 담겨있는 변경사항들을 실제 DB에 반영하지 않고 다 삭제한 후 마지막 COMMIT

        시점으로 돌아간다.

   ③ SAVEPOINT 포인트명;

      : 현재 시점에 임시 저장점을 정의한다.

   ④ ROLLBACK TO 포인트명;

      : 전체 변경사항들을 삭제(마지막 COMMIT 시점까지 돌려놓기)하는 것이 아니라 해당 포인트 지점까지의

        트랜잭션을 롤백한다.

 

-- EMPLOYEE 테이블의 직원 수 조회하기
SELECT * FROM EMPLOYEE; -- 직원 수 16명

-- 사번이 777인 사원 삭제하기
DELETE FROM EMPLOYEE
WHERE EMP_ID = 777;

-- 이름이 남사려인 사원 삭제하기
DELETE FROM EMPLOYEE
WHERE EMP_NAME = '남사려';

ROLLBACK; -- 직원 수 16명
-- 변경사항이 반영되지 않고 COMMIT 후로 돌아가는데 아직 COMMIT한 게 없으므로 그냥 원래대로 돌아간다.

-- 다시 삭제하기
-- 사번이 777인 사원 삭제하기
DELETE FROM EMPLOYEE
WHERE EMP_ID = 777;

-- 이름이 남사려인 사원 삭제하기
DELETE FROM EMPLOYEE
WHERE EMP_NAME = '남사려';

COMMIT; -- 직원 수 14명
-- 변경사항이 반영되어 2명 삭제되었다.
ROLLBACK; -- 직원 수 14명
-- COMMIT 후로 돌아가므로 14명이다.

-- 사번이 209, 210, 214인 사원 삭제하기
DELETE FROM EMPLOYEE
WHERE EMP_ID IN(209, 210, 214);

SELECT * FROM EMPLOYEE; -- 직원 수 11명

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

-- 사원 추가하기
INSERT INTO EMPLOYEE VALUES (333, '서도관', SYSDATE, 2600000); -- 직원 수 12명

ROLLBACK TO SP; -- 직원 수 11명
-- 변경사항을 반영하지 않고 SAVEPOINT SP로 돌아간다.

ROLLBACK; -- 직원 수 14명
-- SAVAPOINT로 돌아가지 않고 COMMIT 후로 돌아간다.
반응형