트랜잭션이란 

- 복수 쿼리를 한 단위로 묶은 것
- 한 덩어리의 쿼리 처리 단위
- 일반적인 DBMS에서 어플리케이션 로직을 구성할 때 사용


Atomicity
- 데이터의 갱신(insery / delete / update)을 수반하는 데이터 조작이 전부 성공할지 전부 실패할지 보증하는 것
- 하나의 트랜잭션이 부분적으로 실행되다가 중단되지 않는 것을 보장
- 예를들어 돈을 빼 오는 작업만 성공하고 받는 쪽에 돈을 넣는 작업을 실패해서는 안됨.

Consistency (일관성)
- 트랜잭션이 실행을 성공적으로 완료하면 일관성있는 데이터베이스의 상태를 유지해야함.
- 무결성 제약중 NOT NULL 조건이있다면 트랜젝션은 중단되어야한다.

Isolation
- 트랜잭션 연산시 다른연산이 끼어들지 못하도록 보장.
- 예를들어 A와 B가 호텔예약을 한다고 했을때, select 후 insert를 하는 트랜잭션을 생각해보자,  A가 트랜잭션을 위해 select 방;을 했을때 10개 빈방이 존재한다면, A가 트랜잭션을 수행하는도중 B가 트랜잭션을 수행하여 select 방; 을똑같이하면 빈방은 10개여야할까? 9개여야할까? mysql 같은경우는 락을걸어 이런 isolation을 보장한다.
- 즉, 고립성이란 복수의 트랜잭션이 순서대로 실행되는것이며 이는 데이터가 병렬로 처리되는 것이 아닌, 직렬로 처리되는 것을 말함. 이는 Serializable(직렬화 가능)한 고립성이라고 함
- 그러나 직렬화로 인해 동시에 동작하는 Transaction이 1가지일경우 성능면에서 비효율적이다.
- ANSI(미국국가규격협회) 에서 권고하는 트랜젝션 격리 완화수준 4개가 있다. 이를 트랜젝션의 격리수준(Transaction Isolationo Level) 이라 한다.

Durability
-성공적으로 실행된 트랜잭션은 persistance 하게 반영되여야함. 즉 시스템 장애, DB일관성 체크등을 하더라도 유지되어야함.
-트랜잭션은 로그에 모든것이 저장된우 Commit으로 간주됨

+ Recent posts