728x90
반응형
트랜잭션(Transaction) 의미
- 하나의 연속적인 업무 단위
- 트랜잭션에 의한 관계는 필수적인 관계 형태를 가짐
- 하나의 트랜잭션에는 여러 SELECT, INSERT, DELETE, UPDATE 등이 포함될 수 있음
- DML 명령어의 작업 단위
예) A 고객이 B 고객에게 100만원을 계좌이체한다.
- A 고객의 계좌 잔액이 100만원 이상인지 확인
- 맞다면 A 고객 계좌 잔액 -100 (UPDATE)
- B 고객 계좌 잔액 +100 (UPDATE)
이때 2, 3번이 동시에 수행되어야 하고, 모두 성공하거나 모두 실패해야 한다. (All or Nothing)
이러한 업무 특성의 연속적인 단위를 트랜잭션이라고 한다.
주의점
- 각 업무가 서로 독립적으로 발생하면 안됨
- 각각의 INSERT문으로 동작하면 안됨
- 부분 COMMIT 불가
- 동시 COMMIT 또는 ROLLBACK 처리
트랜잭션 4가지 특성
- Atom(원자성, All or Nothing)
- 트랜잭션에 정의된 연산들은 모두 성공적으로 실행되거나 전혀 실행되지 않은 상태로 남아있어야 한다.
- Consistency(일관성)
- 트랜잭션이 실행되기 전에 데이터베이스 내용이 잘못되어 있지 않다면, 실행된 이후에도 데이터베이스 내용에 잘못된 부분이 없어야 한다.
- Isolation(독립성, 고립성, 격리성)
- 트랜잭션이 실행되는 도중에 다른 트랜잭션에 영향을 받아 잘못된 결과를 만들어서는 안된다.
- Durability(지속성)
- 트랜잭션이 성공적으로 수행되면 해당 트랜잭션이 갱신한 데이터베이스 내용은 영구적으로 저장된다.
Isolation이 낮은 경우 발생되는 문제점
- Dirty Read
- 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽음
- Non-Repeatable Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정/삭제 하여 두 쿼리의 결과가 다르게 제공되는 현상
- Phantom Read
- 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는 데, 그 사이에 다른 트랜잭션이 값을 추가하여 첫 번째 쿼리 결과에 없던 레코드가 두 번째 쿼리에서 제공되는 현상
필수적, 선택적 관계와 ERD
- 두 엔터티의 관계가 서로 필수적일 때 하나의 트랜잭션을 형성
- 두 엔터티가 서로 독립적 수행이 가능하다면 선택적 관계로 표현
SQL문
- begin transaction(begin tran)
- 새로운 트랜잭션 생성
- commit(commit transaction)
- 현재 트랜잭션을 적용하고 종료
- rollback(rollback transaction)
- 최초의 begin transaction 시점까지 모두 롤백하고 종료
- save transaction
- Savepoint(저장점)을 정의해서 특정 지점까지의 롤백이 가능하게 함
-
-- [SQL Server] -- 트랜잭션 시작 begin transaction; -- sp1 저장점 설정 save transaction sp1; update ...; -- sp2 저장점 설정 save transaction sp2; delete ...; -- sp2 저장점 롤백 (delete 롤백됨) rollback transaction sp2; -- 커밋 (트랜잭션 종료) commit;
반응형
'[DB]DataBase > [SQL]' 카테고리의 다른 글
[SQLD] 본질 식별자 vs. 인조식별자 (0) | 2024.03.06 |
---|---|
[SQLD] Null 속성 (0) | 2024.03.04 |
[SQLD] 관계와 조인 (0) | 2024.03.02 |
[SQLD] 정규화(Normalization) (0) | 2024.03.01 |
[SQLD] 데이터 모델링 요소-4)식별자(Identifier) (0) | 2024.02.27 |