- TCL 과 트랜잭션
- 특정 시점(SAVEPOINT) 까지 ROLLBACK 하기
TCL 과 트랜잭션
- 트랜잭션이란?
-Transaction(트랜잭션)이라 함은 관련된 일련의 DML로 이루어진 한꾸러미(한세트)를 말한다.
Transaction(트랜잭션)이라 함은 데이터베이스의 상태를 변환시키기 위하여 논리적 기능을 수행하는 하나의 작업단위를 말한다.
트랜잭션 예시)
네이버카페(다음카페)에서 활동
글쓰기(insert)를 1번하면 내포인트 점수가 10점이 올라가고(update),
댓글쓰기(insert)를 1번하면 내포인트 점수가 5점이 올라가도록 한다(update)
위와같이 정의된 네이버카페(다음카페)에서 활동은 insert 와 update 가 한꾸러미(한세트)로 이루어져 있는 것이다.
이와 같이 서로 다른 DML문이 1개의 작업을 이룰때 Transaction(트랜잭션) 처리라고 부른다.
Transaction(트랜잭션) 처리에서 가장 중요한 것은
모든 DML문이 성공해야만 최종적으로 모두 commit 을 해주고,
DML문중에 1개라도 실패하면 모두 rollback 을 해주어야 한다는 것이다.
예를 들면 네이버카페(다음카페)에서 글쓰기(insert)가 성공 했다라면
그 이후에 내포인트 점수가 10점이 올라가는(update) 작업을 해주고, update 작업이 성공했다라면
commit 을 해준다.
만약에 글쓰기(insert) 또는 10점이 올라가는(update) 작업이 실패했다라면
rolllback 을 해준다.
이러한 트랜잭션을 컨트롤 하기 위한 언어를 TCL(Transaction Control Language) 라고 한다.
TCL 에는 commit 과 rollback 이 있다.
※
DML 은 수동 commit이고,
DDL 은 자동 commit이기때문에 따로 commit을 해줄 필요가 없다.
특정 시점(SAVEPOINT) 까지 ROLLBACK 하기
DML 작업들을 하다가 특정 시점에 SAVEPOINT를 선언하고 ROLLBACK을 하면, 그 SAVEPOINT를 선언한 곳까지만 ROLLBACK이 된다.
SAVEPOINT 까지 ROLLBACK 하는 예제코드(오라클 내부의 HR 계정의 샘플테이블을 이용)
select *
from employees
where department_id = 50;
update employees set first_name = 'TEST'
where department_id = 50;
-- 45개 행 이(가) 업데이트되었습니다.
savepoint point_1;
-- Savepoint이(가) 생성되었습니다.
delete from employees
where department_id is null;
-- 1 행 이(가) 삭제되었습니다.
select first_name
from employees
where department_id = 50;
-- 전부다 'TEST' 로 나온다.
select *
from employees
where department_id is null;
-- 행이 없다.
rollback to savepoint point_1;
-- 롤백 완료.
-- savepoint point_1; 이 선언되어진 이후로 실행된 DML문을 rollback 시킨다.
/*
그러므로
delete from employees
where department_id is null; 만 롤백시킨다.
*/
'개발 > Oracle' 카테고리의 다른 글
[Oracle]오라클 TRUNCATE (0) | 2022.07.21 |
---|---|
[Oracle]오라클 ROWID,ROWNUM,페이징처리하기 (0) | 2022.07.21 |
[Oracle] 오라클 Set Operator(SET 연산자,집합연산자) (0) | 2022.07.21 |
[Oracle] 오라클 Join 과제하기 (0) | 2022.07.20 |
[Oracle] 오라클 Join(조인) (0) | 2022.07.20 |
개발을 하며 만났던 문제들과 해결 과정, 공부한 내용 등을 기록합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!