구매 : 강감찬이 사과 10개와 배 20개를 구매
Update : 상품의 재고 수량이 감소
Insert : 주문 테이블에 주문 내역이 추가
Update : 회원의 마일리지 포인트 적립
위 4건의 업무를 논리적으로 보았을 때 하나의 묶음 단위로 처리가 되어야 하며, 이러한 논리적은 묶음을 트랜잭션이라고 함
commit
명령어를rollback
명령어를 사용commit
과 rollback
명령어에 의해 트랜잭션은 종료됨이전에 수행했던 모든 작업들을 영구적으로 저장하겠다고 데이터베이스에 알려주는 명령어로, commit 명령어를 사용하면 해당 지점까지 하나의 트랜잭션이 종료됨
<----- 첫 번째 트랜잭션 -----> <----- 두 번째 트랜잭션 ----->
Insert > Update > Delete > Insert > Update > Delete
(출근) --------------- (Commit) --------------- (Commit)
출근과 동시에 첫 번째 트랜잭션이 시작되며, Commit 과 동시에 첫번째 트랜잭션이 종료됨, 이후 두 번째 Insert문이 시작되는 지점에서 두 번째 트랜잭션이 시작됨
작업을 수행하다가 사용자의 실수로 인한 명령어 취소 또는 어떠한 문제가 발생하였을 때 발생했던 모든 변경 사항들을 취소하고자 할 때 사용하는 명령어
<----- 첫 번째 트랜잭션 -----> <----- 두 번째 트랜잭션 ----->
(1)--------------------(2)--(3)--------------------(4)
Insert > Update > Delete > Insert > Update > Delete
(출근) --------------- (Commit) --------------- (rollback)
(3) 지점에서 두 번째 트랜잭션이 시작되었을 때, (4) 지점에서 트랜잭션이 완료되었으나 rollback
이 발생하게됨. 이로 인해 두 번째 트랜잭션이 수행되기 전인 (2) 지점으로 원상 복귀함
저장점은 큰 트랜잭션을 작게 분할하는 기법으로, 중간 중간에 저장된 저장점까지 rollback을 수행할 수 있음
(명령어)
savepoint 레이블_이름
rollback to 레이블_이름
------(1)------------------(2)-----------------(3)-------(4)
insert >> update >> delete >> insert >> update >> delete
----commit-----------savepoint1---------savepoint2---commit
(4) 지점에서 rollback
할 경우, (1) 지점으로
(4) 지점에서 rollback to savepoint1
할 경우, (2) 지점으로
(4) 지점에서 rollback to savepoint2
할 경우, (3) 지점으로
원상 복귀 되어짐
CTAS
기법을 통해 집합 연산자 파트에서 좀 더 세부적으로 나눔
create table myemp as
select id, name, salary, marriage, gender from employees;
성별이 여자인 사람의 급여를 1000으로 설정
update myemp1 set salary=1000 where gender='여자';
commit;
select * from myemp1;
savepoint
실습
이전 테이블을 삭제하고 테이블 다시 생성
create table myemp2 as
select id, name, salary, marriage, gender from employees;
select * from myemp2;
최초의 상태를 savepoint point01
로 지정,
그 후 성별이 여자인 회원의 급여를 1000으로 수정
savepoint point01;
update myemp2 set salary=1000 where gender='여자';
select * from myemp2;
현재의 상태를 savepoint point02
로 지정,
성별이 남자인 회원을 모두 삭제
savepoint point02;
delete from myemp2 where gender='남자';
select * from myemp2;
rollback to
문구를 사용해 savepoint point02
지점으로 이동
rollback to point02;
select * from myemp2;
savepoint point01
지점으로 이동
rollback to point01;
select * from myemp2;