- Arawn's Dev Blog
- Outsider's Dev Story
- Toby's Epril
- Benelog
- NHN 개발자 블로그
- SK 플래닛 기술 블로그
- OLC CENTER
- 소프트웨어 경영/공학 블로그
- 모바일 컨버전스
- KOSR - Korea Operating System …
- 넥스트리 블로그
- 리버스코어 ReverseCore
- SLiPP
- 개발자를 위하여... (Nextree 임병인 수석)
- "트위터 부트스트랩: 디자이너도 놀라워할 매끈하고 직관…
- Learning English - The English…
- real-english.com
- 'DataScience/Deep Learning' 카테…
- Deep Learning Summer School, M…
- Deep Learning Courses
민서네집
[MySQL] Transaction Isolation Level 변경시키기. 본문
[참고] http://gywn.net/2012/05/mysql-transaction-isolation-level/
웹어플리케이션에서 MySQL DB를 사용하는데, 트랜잭션을 사용하기 위해서
my.ini 파일에서
[mysqld]
autocommit=0
이렇게 설정했다. 그리고 웹어플리케이션을 실행시키고, DB 접속하는 프로그램(나는 HeidiSQL을 사용한다.)을 띄워서 조회를 해봤는데, 웹어플리케이션에서 변경한 사항이 조회되지 않았다.
이것은 MySQL의 Default Transaction Isolation Level 이 REPEATABLE-READ 로 되어 있어서 발생하는 현상이다.
현재 트랜잭션이 커밋되지 않은 상태에서는 다른 트랜잭션과 관계없이 반복적인 읽기 시에 동일한 결과를 보장하는 ISOLATION LEVEL 이다.
이런 경우 COMMIT; 명령을 한번 수행하고 , 조회를 해보면 웹어플리케이션에서 변경한 내용을 조회할 수 있다.
아니면 DB 접속 프로그램에서 AUTOCOMMIT = TRUE; 명령을 준 상태에서 조회해도 된다.
DB 접속 프로그램에서 웹어플리케이션의 변경 내용을 바로 조회할 수 있으려면 MySQL의 TRANSACTION ISOLATION LEVEL 을 READ-COMMITTED 이나 READ-UNCOMMITTED 상태로 바꿔야 한다.
DB 접속 프로그램에서
set autocommit = FALSE;
set tx_isolation = 'READ-COMMITTED';
COMMIT; (반드시 한번 COMMIT 해줘야지 반영된다.)
위와 같이 하면, 웹어플리케이션의 변경 내용을 바로바로 조회할 수 있다.
my.ini 파일에서
( Windows 7 OS 에서는 C:\ProgramData\MySQL\MySQL Server 5.6\my.ini )
[mysqld]
autocommit=0
transaction-isolation = READ-COMMITTED
이렇게 해주고, MySQL DB를 재시작 하고, DB 접속 프로그램에서
SELECT @@tx_isolation; 명령을 주면
READ-COMMITTED
라고 결과가 나온다.
Oracle DB 에서는 Default Transaction Isolation Level 이 뭘로 되어 있을까?
READ COMMITTED . The READ COMMITTED isolation level states that a transaction may read only data that has been committed in the database. There are no dirty reads (reads of uncommitted data). There may be nonrepeatable reads (that is, rereads of the same row may return a different answer in the same transaction) and phantom reads (that is, newly inserted and committed rows become visible to a query that weren't visible earlier in the trans-action).READ COMMITTED is perhaps the most commonly used isolation level in database applications everywhere, and it's the default mode for Oracle Database. It's rare to see a different isolation level used in Oracle databases.
[원문] http://www.oracle.com/technetwork/issue-archive/2005/05-nov/o65asktom-082389.html
'Database > MySQL' 카테고리의 다른 글
[MySQL] ERwin 연동하여 Reverse Engineering (1) | 2013.07.23 |
---|---|
MySQL에서 사용하기 좋은 Client Tool (0) | 2013.06.29 |
[MySQL] 쿼리를 의도적으로 지연시키기. (sleep function) (2) | 2013.06.22 |
[MySQL] LAST_INSERT_ID( expr ) 의 사용, Sequence 흉내내기. (0) | 2013.06.20 |
CODE NAME 을 반환하는 MySQL Function (0) | 2013.06.07 |