📌 트랜잭션 관리 (Transaction Management)

<aside> 💡

트랜잭션은 데이터베이스에서 일련의 작업 단위를 뜻하며, 데이터의 일관성안정성을 보장합니다. 트랜잭션은 반드시 ACID 속성을 만족해야 합니다.

</aside>


🧩 ACID 속성


🔧 트랜잭션 관리 명령어

명령어 설명
BEGIN 트랜잭션을 시작합니다.
COMMIT 트랜잭션을 완료하고 모든 변경사항을 확정합니다.
ROLLBACK 트랜잭션을 취소하고 변경사항을 원래 상태로 복구합니다.
SAVEPOINT name 트랜잭션 내 특정 시점에 저장점(Savepoint)을 설정합니다.
RELEASE SAVEPOINT name 설정한 저장점을 해제합니다.

🛠️ 트랜잭션 격리 수준 (Isolation Levels)

트랜잭션 간의 상호작용을 제어하는 수준으로, 낮은 격리 수준일수록 성능은 향상되지만, 데이터 일관성 문제 위험이 증가합니다.

격리 수준 설명 문제 가능성
Read Uncommitted 커밋되지 않은 데이터도 읽을 수 있습니다. Dirty Read, Non-Repeatable Read
Read Committed 커밋된 데이터만 읽을 수 있습니다. Non-Repeatable Read
Repeatable Read 동일 트랜잭션 내에서 읽은 데이터는 항상 동일합니다. Phantom Read
Serializable 가장 높은 격리 수준. 완전한 데이터 일관성을 보장하지만 성능 저하 우려. 없음

📋 트랜잭션 사용 예시

BEGIN;  
UPDATE accounts SET balance = balance - 100 WHERE id = 1;  

-- 조건: 계좌 잔액이 음수로 떨어지면 롤백
IF (SELECT balance FROM accounts WHERE id = 1) < 0 THEN  
    ROLLBACK;  
ELSE  
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;  
    COMMIT;  
END IF;

설명: