DB

14. MySQL transaction

유니개발 2023. 5. 3. 06:03

Transaction

- 단일한 논리적인 작업 단위 (a single logical unit of work)

- 논리적인 이유로 여러 SQL문들을 단일 작업으로 묶어서 나눠질 수 없게 만든 것이 transaction임

- transaction의 SQL문들 중에 일부만 성공해서 DB에 반영되는 일은 일어나지 않음

 

예시 1
예시 2

AUTOCOMMIT

- 각각의 SQL문을 자동으로 transaction 처리 해주는 개념

- SQL문이 성공적으로 실행하면 자동으로 commit 함

- 실행 중에 문제가 있었다면 알아서 rollback 함

- MySQL에서는 default로 autocommit이 enabled 되어 있음

- 다른 DBMS에서도 대부분 같은 기능을 제공함

 

SELCT @@AUTOCOMMIT; -> 현재 autocommit이 활성화되어있는지 확인하는 쿼리문

 

autocommit을 off한 후에 SQL문이 실행되면, rollback을 통해 다시 이전 상태로 돌아갈 수 있음.

START TRANSACTION 실행과 동시에 autocommit은 off 됨

commit / rollback 과 함께 transaction이 종료되면 원래 autocommit 상태로 돌아감

 

일반적인 transaction 사용 패턴

1. transaction을 시작(begin)한다

2. 데이터를 읽거나 쓰는 등의 SQL문들을 포함해서 로직을 수행한다

3. 일련의 과정들이 문제없이 동작했다면 transaction을 commit 한다

4. 중간에 문제가 발생했다면 transaction을 rollback 한다

 

 

ACID - transaction이 어떤 속성을 지녀야 하는지를 나타내는 개념들

Atomicity, Consistency, Isolation, Durability

 

Atomicity

- All or NOTHING

- transaction은 논리적으로 쪼개질 수 없는 작업 단위이기 때문에 내부의 SQL문들이 모두 성공해야함

- 중간에 SQL문이 실패하면 지금까지의 작업을 모두 취소하여 아무 일도 없었던 것처럼 rollback 함

- commit 실행 시 DB에 영구적으로 저장하는 것, rollback 실행 시 이전 상태로 되돌리는 것은 DBMS가 담당하는 부분임

- 개발자는 언제 commit 하거나 rollback 할지를 신경써야함!

 

Consistency

- transaction은 DB 상태를 consistent 상태에서 또 다른 consistent 상태로 바꿔줘야 함

- constraints, trigger 등을 통해 DB에 정의된 rules을 transaction이 위반했다면 rollback 해야함

- transaction이 DB에 정의된 rule을 위반했는지는 DBMS가 commit 전에 확인하고 알려줌

- 그 외에 application 관점에서 transaction이 consistent하게 동작하는지는 개발자가 신경써야함!

 

Isolation

- 여러 transaction들이 동시에 실행될 때도 혼자 실행되는 것처럼 동작하게 만듦

- DBMS는 여러 종류의 isolation level을 제공함

- 개발자는 isolation level 중에 어떤 level로 transaction을 동작시킬지 설정할 수 있음

- concurrency control의 주된 목표가 isolation임

 

Durability

- commit된 transaction은 DB에 영구적으로 저장함

- 즉, DB system에 문제(power fail or DB crash)가 생겨도 commit된 transaction은 DB에 남아있음

- '영구적으로 저장한다'라고 할 때는 일반적으로 '비휘발성 메모리(HDD, SSD, ..)에 저장함'을 의미함

- 기본적으로 transaction의 durability는 DBMS가 보장함

 

 

 

 

 

 

 

 

출처 : https://www.youtube.com/watch?v=sLJ8ypeHGlM&list=PLcXyemr8ZeoREWGhhZi5FZs6cvymjIBVe&index=14