Search

트랜젝션

대분류
DB
소분류
MySQL
주요 레퍼런스
https://www.geeksforgeeks.org/sql-transactions/
https://m.blog.naver.com/regenesis90/222213959170
수준
심화
태그
트랜젝션
COMMIT
ROLLBACK
SAVEPOINT
최종 편집 일시
2024/10/27 15:32
생성 일시
2024/07/18 01:15
13 more properties

트랜젝션(Transaction)

거래
데이터베이스 내에서 하나의 그룹으로 처리되어야 하는 명령문들을 모아 놓은 논리적인 작업 단위
데이터베이스 응용 프로그램 = 트랜잭션들의 집합
여러 단계의 처리를 하나의 처리처럼 다루는 기능
여러 개의 명령어의 집합이 정상적으로 처리되면 정상 종료
하나의 명령어라도 잘못되면 전체 취소
사용 이유 : 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위함

필요성

거래의 안정성을 확보하는 방법
거래가 성공적으로 모두 끝난 후에야 이를 완전한 거래로 승인하고, 거래 도중 뭔가 오류가 발생했을 때는 이 거래를 아예 처음부터 없었던 거래로 되돌리는 것
데이터베이스에선 테이블에서 데이터를 읽어 온 후 다른 테이블에 데이터를 입력하거나 갱신, 삭제하는데 처리 도중 오류가 발생하면 모든 작업을 원상태로 복구. (Ctrl + Z)
데이터베이스에선 처리 과정이 모두 성공했을 때만 최종적으로 데이터베이스에 반영

특징

원자성 : 트랜잭션이 데이터 베이스에 모두 반영이 되거나 전혀 되지 않는것
일관성 : 트랜잭션의 작업 처리 결과가 항상 일관성 있어야 하는 것
독립성 : 둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 경우에 어느 하나의 트랜잭션이라도 다른 트랜잭션의 연산을 끼어들 수 있는 것
지속성 : 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 하는 것

상태

트랜잭션 파트
내가 적은 쿼리문
성공 시 데이터를 최종적으로 데이터베이스에 반영하는 COMMIT
실패 시 COMMINT 시점으로 다시 되돌아가는 ROLLBACK
1.
활동 : 트랜잭션이 실행 중에 있는 상태, 연산들이 정상적으로 실행 중인 상태
2.
실패 : 트랜잭션이 실행에 오류가 발생하여 중단된 상태
3.
철회 : 트랜잭션이 비정상적으로 종료되어 ROLLBACK 연산을 수행한 상태
4.
부분적 완료 : COMMIT 연산이 실행되기 직전의 상태로 아직 작성한 것들을 저장하지 않은 상태
5.
완료 : 트랜잭션이 성공적으로 종료되어 COMMIT 연산을 실행한 후의 상태

COMMIT

완전 저장
모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어로 처리과정을 DB에 영구 저장하는 것
COMMIT을 수행하면 하나의 트랜잭션 과정을 종료하는 것
COMMIT을 수행하면 이전 데이터가 완전히 UPDATE 됨
1.
위 그림에서 첫번째 COMMIT(2) 후 그 뒤에 UPDATE 문으로 데이터를 갱신하고(3), DELETE문으로 데이터를 삭제하고(4), INSERT 문을 사용해 데이터를 삽입(5)
2.
만약 이 모든 과정이 오류 없이 수행되었다면 해당 트랜잭션{지금까지 실행한 모든 작업(3,4,5)들}을 데이터베이스에 영구 저장하라는 명령으로 COMMIT을 수행
COMMIT;
SQL
복사

ROLLBACK

작업 중 문제가 발생되어 트랜잭션의 처리과정에서 발생한 변경사항을 취소하는 명령어
트랜잭션이 시작되기 이전의 상태로 되돌린다.
== 마지막 COMMIT을 완료한 시점으로 다시 돌아간다.
COMMIT하여 저장한 것만 복구
위 그림에서 ROLLBACK 명령은 마지막으로 수행한 COMMIT 명령까지만 정상처리(1,2)된 상태로 유지
그 이후에 트랜잭션{수행했던 모든 DML 명령어 작업(3,4,5)들}을 취소시켜 이전 상태로 원상 복귀
트랜잭션은 이렇든 ALL-OR-Nothing 방식으로 DML 명령어들을 처리
ALL-OR-Nothing : '모든것을 수행하던지 아무것도 하지말던지'라는 의미
ROLLBACK TO [SAVEPOINT NAME];
SQL
복사

SAVEPOINT

임시저장
보통 ROLLBACK을 명시하면 INSERT, DELETE, UPDATE 등의 작업 전체가 취소되는데 전체가 아닌 특정 부분에서 트랜잭션 취소 가능
SAVEPOINT를 쓰면 현재의 트랜잭션을 작게 분할 가능
SAVEPOINT는 여러 개의 SQL문의 실행을 수행하는 트랜잭션의 경우에 사용자가 트랜잭션 중간 단계에서 SAVEPOINT를 지정 가능
SAVEPOINT : ROLLBACK할 포인트 지정
기본형태 : SAVEPOINT 세이브포인트이름;
ROLLBACK 형태 : ROLLBACK TO 세이브포인트이름;