database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 30012 게시물 읽기
No. 30012
mysql의 InnoDB의 row level 락킹 관련 질문입니다.
작성자
정수화
작성일
2011-06-16 10:54ⓒ
2011-06-16 10:55ⓜ
조회수
8,819

InnoDB 를 로우레벨 락킹을 할려고 합니다.

먼저 클라이언트(세션)를 두개 뛰워 놓았습니다.

그리고 먼저 세션A에서 아래와 같이 입력했습니다.

-----------------------------------------------------------------

<세션A>

mysql> set autocommit=0;

mysql> select * from vc_test for update;

대기...

 

<세션B>

mysql> select * from vc_test where addr="춘천";

-----------------------------------------------------------------

위와 같이하면 <세션B> 의 select * from vc_test;  이 구문이 <세션B>가 끝날때 까지 실행이 대기상태로 있거나 아니면 아예 실행이 되지 않아야 하는 것 아닌가요?

즉, <세션A> 의 select 문에서 마지막에 for update를 붙이게 되면  다른 세션들의 select, insert, update, delete 문에 대하여 배타적 우선권이 생기기 때문에 다른 세션 모두 실행 대기 상태가 되어야 하는 것이 아닌가요?

다시 말씀드리면 다른 세션의 insert, update, delete 문에 대하여는 배타적 잠금이 생기나 오직 select 문에 대하여는 배타적 작금이 생기지 않습니다.

그러나 위 <세션B> 의 select 문 끝에 for update를 붙여서  mysql> select * from vc_test where addr="춘천" for update; 와 같이 하면 <세션A>의 실행이 끝날때 까지 대기 상태가 되어 지는대 꼭 select문 끝에 for update 가 붙어 이는 경우에만 배타적 잠금이 생긴다는 문제점이 이쉽네요.

결국 LOCK IN SHARE 와 FOR UPDATE 라는 키워드의 차이점이 없는 것 같습니다.

혹시 제가 질못 알고 있는 것인가요?

저와 같은 질문을 한 곳이 있어군요: http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=174986

 

이 문제를 잘 아시는 분은 답변 좀 부탁드립니다.

[Top]
No.
제목
작성자
작성일
조회
30016SELECT - WHERE절 질문드립니다. [1]
렘스
2011-06-24
6920
30014RAISE_APPLICATION_ERROR 기능문의
박세정
2011-06-23
7141
30013/mysql: 인수 명단이 너무 김 [1]
김승철
2011-06-17
7489
30012mysql의 InnoDB의 row level 락킹 관련 질문입니다.
정수화
2011-06-16
8819
30011다중 테이블 select 구문 [1]
노인철
2011-06-15
8322
30010다중 row 를 하나의 row로 가져 오려면 [2]
다중열
2011-06-15
7932
30008db에서 뽑아온 자료의 정렬문제입니다. [1]
조근호
2011-06-12
8015
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다