트랜잭션 개요

심준석·2024년 6월 4일
0

데이터베이스

목록 보기
4/5
post-thumbnail
post-custom-banner

트랜잭션 개요

  • 트랜잭션은 데이터 처리에 있어 하나의 논리적 단위.
  • 트랜잭션이 필요한 이유는 데이터의 무결성을 유지하고, 일관성 있게 안정적으로 데이터를 유지하기 위함

트랜잭션의 개념

구매 : 강감찬이 사과 10개와 배 20개를 구매
Update : 상품의 재고 수량이 감소
Insert : 주문 테이블에 주문 내역이 추가
Update : 회원의 마일리지 포인트 적립

위 4건의 업무를 논리적으로 보았을 때 하나의 묶음 단위로 처리가 되어야 하며, 이러한 논리적은 묶음을 트랜잭션이라고 함

트랜잭션 제어어

  • 데이터 조작어(DML)는 해당 작업이 실행 됨과 동시에 트랜잭션이 시작됨
  • 이러한 작업이 영구적으로 저장이 되려면 commit 명령어를
  • 취소하기 위해선 rollback 명령어를 사용
  • commitrollback 명령어에 의해 트랜잭션은 종료됨

커밋(Commit)

이전에 수행했던 모든 작업들을 영구적으로 저장하겠다고 데이터베이스에 알려주는 명령어로, commit 명령어를 사용하면 해당 지점까지 하나의 트랜잭션이 종료됨

<----- 첫 번째 트랜잭션 -----> <----- 두 번째 트랜잭션 ----->
Insert > Update > Delete > Insert > Update > Delete
(출근) --------------- (Commit) --------------- (Commit)

출근과 동시에 첫 번째 트랜잭션이 시작되며, Commit 과 동시에 첫번째 트랜잭션이 종료됨, 이후 두 번째 Insert문이 시작되는 지점에서 두 번째 트랜잭션이 시작됨

롤백(Rollback)

작업을 수행하다가 사용자의 실수로 인한 명령어 취소 또는 어떠한 문제가 발생하였을 때 발생했던 모든 변경 사항들을 취소하고자 할 때 사용하는 명령어

<----- 첫 번째 트랜잭션 -----> <----- 두 번째 트랜잭션 ----->
(1)--------------------(2)--(3)--------------------(4)
Insert > Update > Delete > Insert > Update > Delete
(출근) --------------- (Commit) --------------- (rollback)

(3) 지점에서 두 번째 트랜잭션이 시작되었을 때, (4) 지점에서 트랜잭션이 완료되었으나 rollback 이 발생하게됨. 이로 인해 두 번째 트랜잭션이 수행되기 전인 (2) 지점으로 원상 복귀함

저장점(Savepoint)

저장점은 큰 트랜잭션을 작게 분할하는 기법으로, 중간 중간에 저장된 저장점까지 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;

profile
Developer & Publisher 심준석 입니다.
post-custom-banner

0개의 댓글