데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위
쿼리(Query)문들을 하나로 묶어 처리한다 -> 모든 쿼리 작업을 성공적으로 완료해야 종료되고 작업이 하나라도 실패하면 트랜잭션이 실패한 것으로 판단한다.
트랙잭션을 효율적으로 설계하는 것이 데이터를 다룰 때 많은 이점을 가져다준다.
데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위해 사용한다.
트랜잭션의 안전성을 보장하기 위해 필요한 특성 4가지
트랜잭션이 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다. (All or Nothing)
트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다. (데이터 타입이 동일해야 함)
둘 이상의 트랜잭션이 동시에 실행되고 있을 때 어떤 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다.
트랜잭션이 성공적으로 완료되면 데이터베이스에 결과가 영구적으로 반영되어야 한다. (트랜잭션에 대한 로그가 남아야 한다)
트랜잭션에서 일관성이 없는 데이터를 허용하도록 하는 수준
트랜잭션에서 처리중인(커밋 이전의) 데이터를 다른 트랜잭션에서 읽는 것을 허용한다.
Dirty Read
, Non-Repeatable Read
, Phantom Read
현상이 발생한다.Dirty Read
를 방지하기 위해 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용한다.
Non-Repeatable Read
, Phantom Read
현상이 여전히 발생한다.선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신 혹은 삭제하는 것을 허용하지 않는다.
선행 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 삽입도 허용하지 않는다.
트랜잭션에서 처리중인(커밋 이전의) 데이터를 다른 트랜잭션에서 읽을 수 있도록 허용할 때 발생
한 트랜잭션 내에서 같은 쿼리를 두번 수행할 때 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제함으로써 두 쿼리의 결과가 다르게 나오는 현상
한 트랜잭션 안에서 레코드를 두 번 이상 읽을 때 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상
격리 수준 | Dirty Read | Non Repeatable Read | Phantom Read |
---|---|---|---|
0. Read Uncommitted | O | O | O |
1. Read Committed | X | O | O |
2. Repeatable Read | X | X | O |
3. Serializable | X | X | X |