2.3 모델이 표현하는 트랜잭션의 이해
데이터베이스에 데이터를 삽입, 수정, 삭제할 때, 원자적으로 하나의 단위로 실행되어야 데이터의 정합성이 깨지지 않는다. 작업이 중간에 미완결된 상태로 중단되어서는 안 된다는 것이다.
트랜잭션 : 작업을 원자적으로 실행하기 위하여 한 번에 수행해야 하는 작업들을 묶은 논리적 단위. 데이터베이스는 트랜잭션 단위로 조작이 발생한다.
트랜잭션의 격리수준 : 여러 개의 트랜잭션을 동시에 처리할 때, 간섭을 완전히 통제한다면 쓰기작업 중에는 해당 데이터의 조회가 전혀 불가능하다는 단점이 있다. 따라서 쓰기작업 중 읽기작업을 어느 정도로 허용할지 결정해야 한다.
① 트랜잭션 관련 SQL 명령(TCL)
– COMMIT : 작업을 정상적으로 처리 완료하여 DB에 반영한다.
– ROLLBACK : 작업을 취소하고 이전 상태로 되돌린다.
– SAVEPOINT : ROLLBACK 시 부분 작업 취소를 위한 저장점을 지정한다.
② 트랜잭션의 특성
– 원자성(Atomicity) : 하나의 트랜잭션으로 묶인 연산들은 모두 실행되든지 전혀 실행되지 않아야 한다.
– 일관성(Consistency) : 트랜잭션의 결과는 정합성을 깨지 않아야 하므로, 트랜잭션 이전에 오류가 없다면 트랜잭션 이후에도 오류가 없어야 한다.
– 고립성(Isolation) : 트랜잭션은 독립적으로 수행되며 다른 트랜잭션이 실행 중간에 간섭하거나 영향을 미치지 않는다.
– 영속성(=지속성, Durability) : 트랜잭션의 결과는 영구적으로 저장되어 유지된다.
③ 트랜잭션의 격리수준이 낮을 때의 문제점
– Dirty Read : 트랜잭션에 의해 수정되었으나 아직 커밋이 되지 않은 상태에서, 다른 트랜잭션이 해당 데이터를 읽게 되면 발생하는 데이터의 불일치 현상.
– Non–Repeatable Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 그 사이에 다른 트랜잭션이 값을 수정하거나 삭제하면서 첫 번째와 두 번째 쿼리의 실행결과가 달라지는 현상.
– Phantom Read : 한 트랜잭션 내에서 같은 쿼리를 두 번 실행할 때, 그 사이에 다른 트랜잭션이 값을 삽입하면서 두 번째 쿼리에서 이전에 없던 레코드가 나타나는 현상.