반응형
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 후로 돌아간다.
반응형