트랜잭션 :
하나의 논리적 단위를 구성하는 일련의 연산들의 집합
단일한 논리적 작업 단위 (a single logical unit of work)
논리적인 이유로 여러 sql 문들을 단일 작업을로 묶어서 나눠가질 수 없게 만든 것
(일부만 성공해서 db에 반영되는 일은 일어나지 않음)
ex) 계좌간 자금 이체
- 전체 작업 정상 완료/처리 안될 경우 아무것도 실행 안됨, 처음 상태로 돌아감
Why ? > DBMS는 많은 사용자 요청 동시 수행이 필수,
동시 발생시 트랜잭션 간 간섭 없애고, 데이터 정합성 일관성 있게 제공해야함.
Commit : 지금까지 작업한 내용을 DB에 영구적으로(permanently) 저장
transaction 종료
Rollback : 지금까지 작업한 내용을 모두 취소하고 transaction 이전 상태로 되돌림
transaction 종료
Auto commit : 각각의 sql문을 자동으로 transaction.
트랜잭션 명시적 시작종료 노력 줄여주고,
일반적 데이터 조작 작업보다 간단하게 만들어줌
sql문 성공적으로 실행시 자동 commit
(실행 중 문제 발생시 알아서 rollback)
-> mysql) default autocommit enabled
일반적 사용 패턴
1. 트랜잭션 begin
2. sql 포함 로직 수행
3. 문제없이 동작 -> commit
4. 문제 발생 -> Rollback
Active: 트랜잭션이 실행 중이며 동작 중인 상태
Partially Committed: 트랜잭션이 실행되고 데이터 변경을 DB에 적용 전 메모리 공간에만 변경해놓은 상태.
Committed: 트랜잭션이 정상적으로 완료 상태. 즉 실제로 메모리에에서 DB에 데이터를 쓴 상태. Rollback 불가능.
Failed: 오류로 트랜잭션 실패 상태.
Aborted: 트랜잭션이 취소 상태. 트랜잭션 실행 이전 데이터로 돌아감.
A 원자성 [회복제어]
All or Nothing
완료되지 않은 트랜잭션 중간 상태 db에 반영 X
논리적 쪼개질 수 없는 transaction, 내부 sql 모두 성공해야함
(=> 중간에 실패하면 지금까지 작업 모두 취소. rollback)
ex) [이체 中 트랜잭션 실패! --> 예금 소멸] 같은 상황 없어야함
C 일관성 [무결성, 동시성 제어]
성공 수행한, 정당 데이터 db에 반영해야. (제약 조건 위반시 rollback, 결과의 일관성)
constraints, trigger 통해 정의된 db rules, 트랜잭션이 위반했다면 rollback
I 고립성 [동시성 제어, 독립성 레벨]
실행 중 또는 부분 결과, 다른 트랙잭션 이용 불가
(트잭 중간 결과가 다른 트잭에게 숨겨져야, 보장 안될 시 트잭 rollback불가)
多 트잭 동시 실행돼도 혼자 실행되는 것처럼 동작하게 만들
dbms는 isolation level 제공
D 영속성 [회복제어]
트랜잭션 성공적 완료 & commit 시
=> 해당 트잭 의한 모든 변경은 장애에도(sw/hw) 보존되어야함
db sys 문제 생겨도 commit된 transaction db에 남아있음
//영구저장 means 비휘발성 메모리에 저장(hdd, ssd)
'CS' 카테고리의 다른 글
S)DB_03_트랜잭션3 (0) | 2024.03.14 |
---|---|
S)DB_03_트랜잭션2 (1) | 2024.03.14 |
S) 01_Feedback (2) | 2024.03.11 |
S) DB_2_ERD (0) | 2024.03.11 |
S) DB_1_key (0) | 2024.03.10 |