1️⃣ 트랜잭션의 개념
트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 합니다.
예를 들어, A계좌에서 B계좌로 10,000을 이체할 경우
START TRANSACTION
1. A 계좌에서 10,000원을 인출하는 쿼리
2. B 계좌에 10,000원을 입급하는 쿼리
COMMIT
만약 1번 쿼리가 수행된 다음 시스템에 문제가 생기거나 다른 UPDATE문이 끼어들어 A 계좌에서 돈을 동시에 인출하게 되면, A 계좌와 B 계좌의 잔액이 의도하지 않는 값이 될 수 있습니다.
따라서 1번 쿼리와 2번 쿼리는 모두 수행되거나 아예 수행되지 않아야 합니다.
2️⃣ 트랜잭션의 성질 (ACID)
- 원자성(Atomicity): 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야 한다.
- 일관성(Consistency): 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야 한다.
- 고립성(Isolation): 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경중인 데이터 값을 훼손하지 않아야한다.
- 지속성(Durability): 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다.
원자성
원자성
이란 트랜잭션이 원자처럼 더 이상 쪼개지지 않는 하나의 프로그램 단위로 동작해야 한다는 의미입니다.
일부만 수행되는 일이 없도록 전부 수행되거나 아예 수행되지 않아야 합니다. SQL에서는 트랜잭션의 시작과 끝을 표시하기 위해 START TRANSACTION
~ COMMIT
문을 사용합니다
일관성
트랜잭션은 데이터베이스의 일관성
을 유지해야 합니다. 일관성은 테이블이 생성될 때 CREATE
문과 ALTER
문의 무결성 제약조건을 통해 명시됩니다.
예를 들어, 정수 데이터가 트랜잭션 종료 후에 문자열이 되있다던지 하는 것은 일관성을 유지하지 못한 상태입니다.
고립성
여러 트랜잭션이 동시에 수행될 때 상호 간섭이나 데이터 충돌이 일어나지 않는 현상을 고립성
이라고 합니다.
같은 데이터를 동시에 읽고 쓸 경우, 변경 중인 데이터를 다른 트랜잭션이 사용하면 데이터의 일관성이 훼손될 수 있습니다. 따라서 동시에 수행되는 트랜잭션이 같은 데이터를 가지고 충돌하지 않도록 제어하는 동시성 제어
작업이 필요합니다.
지속성
트랜잭션이 정상적으로 완료되거나 혹은 부분완료한 데이터는 반드시 데이터베이스에 기록되어야 합니다. 이러한 성질을 지속성
이라고 부릅니다.
트랜잭션이 정상적으로 완료된 경우에는 버퍼의 내용을 하드디스크에 확실히 기록하여야 하며, 실패한 경우에는 작업을 취소하여야합니다.
부분 완료 상태
트랜잭션 수행은 완료되었지만 변경 내용이 데이터베이스에 기록되었는지 확실하지 않은 상태입니다. DBMS가 최종적으로 변경 내용을 데이터베이스에 기록해야 완료 상태
가 되며, 시스템 내부 문제나 시스템 다운 등으로 변경 내용을 데이터베이스에 기록하지 못했다면 실패 상태
가 됩니다.
실패
트랜잭션을 중간에 중단하였거나 부분완료 상태에서 변경 내용을 데이터베이스에 저장하지 못한 상태를 말합니다. DBMS는 트랜잭션이 수행한 작업을 모두 RollBack
합니다.
3️⃣ 트랜잭션과 DBMS
- DBMS는 원자성을 유지하기 위해 복구 관리자 프로그램을 작동시킵니다
- DBMS는 일관성을 유지하기 위해 무결성 제약 조건과 동시성 제어 알고리즘을 활용합니다
- DBMS는 고립성을 유지하기 위해 동시성 제어 알고리즘을 활용합니다
- DBMS는 지속성을 유지하기 위해 복구 관리자 프로그램을 작동시킵니다
Reference
https://mangkyu.tistory.com/30
MYSQL로 배우는 데이터베이스 개론과 실습, 한빛 아카데미
Uploaded by Notion2Tistory v1.1.0