MySql Gap Lock 관련

이미지
회사에서 MySql을 사용중인데 select for update 사용중에 gap lock 관련 궁금한 사항이 있어 찾아보다가 마침 좋은 포스팅이 있어 가져와 봤습니다. 출처 :  MySQL Gap Lock (두번째 이야기) MySQL Gap Lock (두번째 이야기) Why ? DBMS 서버를 공부하는 데 있어서, “ 왜? ”라는 질문을 가지는 것은 매우 중요해요. 그런데 MySQL 서버를 공부하다 보면, 풀리지 않는 의문들로 머리 속이 복잡해지는 경우가 많아요. 어느 MySQL 전문가는 이런 말을 할 정도로 MySQL 서버에는 수많은 의문들이 있는 것 같아요. 😵‍💫 MySQL 서버에 대해서 너무 깊이 생각하면, 어느 순간 여러분은 의문 투성이 지옥에서 벗어나지 못하게 될 수 있어요. 왜 MySQL 서버는 Supremum Gap lock을 필요로 할까? 왜 Redundant Gap lock을 사용할까? 왜 Implicit lock을 사용하고 다시 이를 Explicit lock으로 변환할까? 등등 질문들이 끝없이 떠오르게 되고, 결국 여러분은 이런 풀리지 않는 질문들속에서 헤어나오지 못하게 될 거에요. 부디 질문을 멈추고 MySQL 서버로부터 여러분 자신을 구하세요. !! 오늘은 MySQL 서버의 잠금에서 미로 같은 혼란을 자주 유발하는  Gap lock 에 대한 이슈 하나를 좀 살펴보려고 해요. 이해할 수 없는 잠금 현상 REPEATABLE-READ  격리 수준을 사용하는 MySQL 서버에서 간단한 잠금 테스트를 해 보려고 해요. 우선 아래와 같이 레코드 3건을 가지는 테이블을 생성해요. SESSION -1 > CREATE TABLE lock_supremum ( id int NOT NULL AUTO_INCREMENT, fd1 char ( 250 ) NOT NULL , PRIMARY KEY (id) ); SESSION -1 > INSERT INTO lock_supremum VALUES ( 3 , 'dum