[DBMS_14] TRANSACTION (rollback 과 commit)
트랜잭션이란?
DB의 상태를 변화시키기 위해 수행하는 작업의 단위
INSERT / DELETE / UPDATE
작업을 완료한 뒤 COMMIT 필수!
1. 커밋 안했을때 rollback 하기
-- 사원테이블의 전체 사원 수 조회
SQL> select count(*) from empl;
COUNT(*)
----------
107
-- 사번이 100번인 사원을 삭제
SQL> DELETE FROM empl WHERE employee_id = 100;
1 row deleted.
--위의 삭제 코드에서 commit을 하지 않아도 내부적으로는 쿼리문이 실행중
SQL> select count(*) from empl;
COUNT(*)
----------
106
--empl테이블의 데이터를 수정
SQL> UPDATE empl SET first_name = 'A';
106 rows updated.
아차차 실수! 이전으로 돌아갈래ㅜㅜ
-- 위의 코드처럼 실수로 잘못 작성된 쿼리문이 있거나
전달이 정상적으로 되지 않은 쿼리문이 있는 경우
rollback; 키워드를 통해서
commit;직전 단계까지로 돌아갈 수 있다.
SQL> rollback;
Rollback complete.
SQL> select count(*) from empl;
COUNT(*)
----------
107
2. 이미 커밋 했을때 rollback 하기
UPDATE empl SET first_name = 'B';
COMMIT;
실수로 잘못들어간 데이터를 commit까지 해버렸을때 rollback; 못함!ㅠㅠ
하지만
commit이 진행 된 이후에 이전단계로 rollback을 원한다면??
1) empl 삭제
DELETE FROM empl;
2) rollback을 원하는 시간대로 돌아가서 테이블을 재 조회 하고 INSERT
INSERT INTO empl
SELECT * FROM empl as of timestamp( systimestamp-interval '10' minute );
commit;
as of timestamp( systimestamp-interval '원하는 시간' 단위 );
-- '1' minute : 1분전
-- '2' hour : 2시간 전
-- '3' day : 3일 전