728x90
반응형
✅ Transaction(트랜잭션)이란?
트랜잭션(Transaction)은 데이터베이스에서 실행되는 하나의 논리적인 작업 단위를 의미합니다.
즉, 여러 개의 SQL 문을 하나의 묶음으로 처리하고, 이를 하나의 작업(트랜잭션)으로 간주합니다.
트랜잭션 문법
BEGIN TRANSACTION; -- 트랜잭션 시작 ( Oracle에서는 자동 )
UPDATE 실행 쿼리
UPDATE 실행 쿼리
COMMIT; -- 트랜잭션 완료 → 저장!
✅ 트랜잭션이 필요한 이유
- 데이터의 무결성(Integrity) 보장
→ 중간에 오류가 나도 완전히 수행되거나(Rollback), 완전히 취소(Commit)되는 것이 중요함. - 은행 시스템, 주문 시스템, 결제 시스템 등에서 필수
→ 예를 들어, 계좌에서 돈을 이체할 때 보내는 쪽에서 차감되었지만 받는 쪽에서 입금이 안 되면 큰 문제임!
✅ 트랜잭션의 특징 (ACID 원칙)
트랜잭션은 ACID 원칙을 따라야 합니다.
ACID 개념
Atomicity (원자성) | 모든 작업이 성공해야 반영, 하나라도 실패하면 전체 취소 |
Consistency (일관성) | 데이터 무결성이 보장되어야 함 |
Isolation (고립성) | 각 트랜잭션이 독립적으로 실행되어야 함 |
Durability (지속성) | 트랜잭션이 성공하면 데이터는 영구적으로 저장 |
✅ 트랜잭션 주요 명령어
명령어 설명
BEGIN TRANSACTION | 트랜잭션 시작 (Oracle에서는 자동) |
COMMIT | 트랜잭션 정상 종료 및 저장 |
ROLLBACK | 트랜잭션 취소 및 이전 상태로 복원 |
✅ 트랜잭션 예제
📌 1. COMMIT: 정상적으로 저장
BEGIN TRANSACTION;
UPDATE 계좌 SET 잔액 = 잔액 - 100000 WHERE 고객ID = 'A100'; -- 돈 출금
UPDATE 계좌 SET 잔액 = 잔액 + 100000 WHERE 고객ID = 'B200'; -- 돈 입금
COMMIT; -- 트랜잭션 정상 완료 → 저장!
✔ 완전히 실행된 경우, 데이터베이스에 영구 반영됨.
📌 2. ROLLBACK: 오류 발생 시 실행 취소
BEGIN TRANSACTION;
UPDATE 계좌 SET 잔액 = 잔액 - 100000 WHERE 고객ID = 'A100'; -- 돈 출금
UPDATE 계좌 SET 잔액 = 잔액 + 100000 WHERE 고객ID = 'B200'; -- 돈 입금
-- 오류 발생: 고객 B200 계좌 없음!
ROLLBACK; -- 모든 변경 사항 취소!
✔ 중간에 오류가 발생하면, 모든 작업이 무효화됨.
✔ 돈이 빠져나갔지만 입금이 안 되는 문제를 방지함!
📌 3. 트랜잭션과 동시성 문제 (Isolation 예제)
두 사용자가 같은 상품의 재고를 동시에 변경할 경우
사용자 A
BEGIN TRANSACTION;
UPDATE 제품 SET 재고 = 재고 - 1 WHERE 제품ID = 'P001';
-- 아직 COMMIT 안 함!
사용자 B
BEGIN TRANSACTION;
UPDATE 제품 SET 재고 = 재고 - 1 WHERE 제품ID = 'P001';
-- 사용자 A가 COMMIT 안 했기 때문에 충돌 가능!
✔ 동시에 실행되면 재고가 꼬일 수 있음 → Isolation이 중요!
✅ 트랜잭션 정리
트랜잭션이란? | 여러 개의 SQL 명령을 하나의 단위로 실행 |
왜 필요함? | 데이터 일관성 유지 & 오류 방지 |
주요 명령어 | BEGIN TRANSACTION, COMMIT, ROLLBACK |
ACID 원칙 | 원자성(Atomicity), 일관성(Consistency), 고립성(Isolation), 지속성(Durability) |
728x90
반응형
'Web Frontend > Database' 카테고리의 다른 글
[SQL] 음수, 양수 확인하기 - SIGN 함수 (0) | 2025.03.05 |
---|---|
[SQL] DECODE로 대체값 넣어서 출력하기 (0) | 2025.03.05 |
[SQL] 데이터 정렬하는 법 - ORDER BY절 활용하기 (0) | 2025.03.05 |
[SQL] 오름차순(ASC)과 내림차순(DESC) 정렬 순서 (0) | 2025.03.05 |
[SQL] + 연산자와 집계 함수( SUM, AVG, COUNT, MIN, MAX etc ) 차이점 (0) | 2025.03.05 |