CS

S)DB_03_트랜잭션

99duuk 2024. 3. 12. 18:17

트랜잭션 :

하나의 논리적 단위를 구성하는 일련의 연산들의 집합

단일한 논리적 작업 단위 (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