본문 바로가기
IT 이론/데이터베이스

[데이터베이스] Transaction isolation level

by 지식id 2012. 12. 12.
반응형

lost update : 두개의 세션에서 동시에 작업 할때 한 세션에서 업데이트 된 값이 다른 세션에서 적용되지 않음

표준 SQL에서 lost update가 적용되는 격리도는 없다. 사실 신경 쓸 필요 없는 개념이다.

 

dirty read : 한 세션에서 적용된, commit되지 않은 값이 다른 세션에서 보여짐

 

no-repeatable read : 한 세션에서 같은 쿼리문을 두 번 실행할 때 그 사이에 다른 세션에서 수행된 결과 때문에 상이한 결과를 나타냄

 

phantom read : 한 세션에서 특정한 범위의 레코드를 두 번 불러 올때 처음에 없었던 레코드가 새로 생김. repeatable read의 개념과 비슷하지만 수정, 삭제 되는 것과 새로 생기는 것을 구분하여 다르게 부른다.

 

 

ISOLATION LEVEL

 

Transaction의 Isolation Level 설정

SET TRANSACTION isolation_mode;

SET TRANSACTION ISOLATON LEVEL isolation_mode;

 

READ UNCOMMITTED : no lost update, dirty read

commit되지 않은 값도 다른 세션에서 적용되어 진다. 

 

READ COMMITTED : no lost update, no dirty read

말그대로 committed된 값만 적용한다.

 

REPEATABLE READ : no lost update, no dirty read, repeatable read

한 세션에서 특정한 값을 읽으면 다른 세션에선 그 값에 대한 수정 및 삭제를 못하게 한다.

 

SERIALIZABLE : no lost update, no dirty read, repeatable read, no phantom read

한 세션에서 읽혀진 row가 변경될 수 있는 값에 대해서는 새로운 레코드 삽입조차 못하게 막아 버린다. 오라클에서만 있는 READ ONLY를 제외하면 가장 제약이 심한 레벨이다.

 

 

AUTO COMMITION

 

Oracle : SET AUTOCOMMIT {ON|OFF}

default : OFF

 

 

 

MySql : SET AUTOCOMMIT = {TURE|FALSE}

default : TRUE

 

반응형

댓글