[정리노트] SQLD 2024년 개정판 - 트랜잭션의 이해
트랜잭션의 개념
- 하나의 연속적인 업무 단위
- 트랜잭션의 읫한 관계는 필수적인 관계 형태를 가짐
- 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있음
- ex) 계좌 이체를 예로
A 고객이 B고객에게 100만원을 이체하려고 한다.
- A 고객의 잔액이 100만원 이상인지 확인
- 이상이면, A고객 잔액을 -100 UPDATE
- B 고객 잔액에 +100 UPDATE
- 이때 2번과 3번 과정이 동시에 수행되어야 한다. 즉 모두 성공하거나 모두 취소돼야 함 (All or Nothing)
- 이런 특성을 갖는 연속적인 업무 단위를 트랜잭션이라고 한다.
트랜잭션의 특징
- 원자성(Atomicity): All or Nothing, 완전히 완료되지 않았을 경우 수행되기 전과 같아야 함
- 일관성(Consistency): 실행이 성공적으로 완료되면 데이터베이스는 모순없이 일관성이 보존된 상태
- 고립성(isolation): 트랜잭션의 부분적 실행결과를 다른 트랜잭션이 접근할 수 없음
- 지속성(Durability): 완료된 트랜잭션의 결과는 영구적으로 데이터베이스에 저장
주의 내용
- A 고객 잔액 차감과 B 고객 잔액 가산이 서로 독립적으로 발생하면 안됨
- 각각의 INSERT 문으로 개발되면 안됨
- 부분 COMMIT 불가
- 동시 COMMIT 또는 ROLLBACK 처리
필수적, 선택적 관계와 ERD 작성
- 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
- 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현
IE표기법
- 원을 사용하여 필수적 관계와 선택적 관계를 구분
- 필수적 관계에는 원을 그리지 않는다
- 선택적 관계에는 관계선 끝에 원을 그린다
바커 표기법
- 실선과 점섬으로 구분
- 필수적 관계는 관계선을 실선으로 표기
- 선택적 관계는 관계선을 점선으로 표기
트랜잭션의 상태 다이어그램
- 실행(Active): 트랜잭션 실행 시작 혹은 실행 중인 상태 (START TRANSACTION)
- 부분완료(Partially Committed): 트랜잭션의 마지막 명령을 실행한 후의 상태
- 실패(Failed): 트랜잭션을 더 이상 정상적으로 실행할 수 없음을 발견한 상태
- 철회(Aborted): 트랜잭션이 실패하여 취소되어 시작 전 상태로 환원된 상태 (ROLLBACK: 수행한 작업을 취소하고 수행 전 상태로 복귀)
- 완료(Committed): 트랜잭션이 성공적으로 완료된 상태 (COMMIT: 수행한 작업은 데이터베이스에 반영)
※ SAVEPOINT: 롤백 기준점 설정
- 트랜잭션 관련 명령어 예시
BEGIN TRANSACTION;--트랜잭션 시작
SAVEPOINT savepoint1;--세이브포인트 설정
UPDATE employees SET last_name = ‘Smith’ WHERE employee_id = 207;
--직원의 성을 업데이트
ROLBACK TO savepoint1;--세이브포인트로 롤백
COMMIT;--변경 사항을 데이터베이스에 영구적으로 저장
반응형
'스터디 > SQL' 카테고리의 다른 글
[정리노트] SQLD 2024년 개정판 - 본질 식별자 vs 인조 식별자 (39) | 2024.08.19 |
---|---|
[정리노트] SQLD 2024년 개정판 - NULL 속성의 이해 (44) | 2024.08.18 |
[정리노트] SQLD 2024년 개정판 - 관계와 조인의 이해 (57) | 2024.08.13 |
[정리노트] SQLD 2024년 개정판 - 정규화 (67) | 2024.08.07 |
[정리노트] SQLD 2024년 개정판 - 식별자 (116) | 2024.08.04 |