강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

Gyeongsu. Seo님의 프로필 이미지
Gyeongsu. Seo

작성한 질문수

Real MySQL 시즌 1 - Part 1

Ep.07 SELECT ... FOR UPDATE

Select for update locking

해결된 질문

작성

·

562

0

Select for update 시 lock 을 걸어 원 데이터를 버장힌다는 것은 이해 하였습니다그렇다면 a|b 가 동시 접근 하여 서로 다른 값으로 변경하려는 부분은 없고 동일 프로세스가 두번 진입 할 수 있다고 가정한다면어차피 update 시 xlock이 row에 대하여 획득하니select for update 는 필요없는게 맞다라고 이해를 했습니다이 부분이 맞을까요?

퀴즈

MySQL에서 CHAR와 VARCHAR 데이터 타입의 주요 차이점은 무엇일까요?

CHAR는 가변 길이, VARCHAR는 고정 길이 문자열을 저장해요.

CHAR는 최대 길이만큼 공간을 미리 할당하고, VARCHAR는 저장된 데이터만큼만 공간을 사용해요.

VARCHAR는 인덱스를 사용할 수 없지만, CHAR는 사용할 수 있어요.

VARCHAR는 최대 저장 용량이 CHAR보다 훨씬 작아요.

답변 2

0

이성욱님의 프로필 이미지
이성욱
지식공유자

경수님, 안녕하세요.

요거 질문을 제가 놓치고 있었네요.

 

말씀주신 것처럼, 동시에 여러 세션이 특정 레코드에 접근하는 것이 아니고,

한 시점에 반드시 하나의 세션에서만 특정 레코드를 변경한다면, 말씀하신 것처럼 SELECT FOR UPDATE는 필요치 않을 듯 합니다. (그런데 이런 보장이 쉽지 않아 보이긴 합니다만...)

 

다시 한번 늦어진 답변 죄송합니다.

0

안녕하세요, 인프런 AI 인턴입니다.
제공된 정보와 질문의 내용이 일치하는 부분이 없어, 직접적인 해답을 제공하기 어렵습니다. 하지만 일반적으로 SELECT FOR UPDATE 구문에 대해 설명드릴 수 있습니다.

SELECT FOR UPDATE 구문은 트랜잭션이 해당 레코드를 읽고 업데이트하기 전까지 다른 트랜잭션에서 해당 레코드를 변경하지 못하게 락을 거는 것을 목적으로 합니다. 이는 데이터의 일관성을 유지하기 위해 사용됩니다. 만약 동일 프로세스가 두 번 진입할 수 있다는 가정 하에, 첫 번째 SELECT FOR UPDATE 실행 시 해당 row에 대한 읽기 락(잠금)이 걸립니다. 그리고 업데이트 시 해당 락이 업그레이드되어 쓰기 락(XLock)으로 전환됩니다. 이로써 다른 트랜잭션이나 프로세스가 해당 데이터에 접근하여 변경하는 것을 방지하게 됩니다.

따라서, 동일 프로세스 내에서 SELECT FOR UPDATE를 사용하는 것이 불필요하다고 이해할 수 있는 부분은, 이미 업데이트 과정에서 데이터에 락이 걸리기 때문에 추가적인 SELECT FOR UPDATE로 인한 락이 필요 없다고 판단될 수 있습니다. 그러나 실제 상황에서는 동시성을 관리하고 데이터의 일관성을 보장하기 위해 SELECT FOR UPDATE 사용이 필요한 경우가 많습니다.

더 자세한 상황이나 예시에 대해서 궁금하시면 관련 전문 문서를 참고하시거나, 데이터베이스 관리에 관한 전문 강의를 수강하는 것도 좋은 학습 방법일 것입니다.

Gyeongsu. Seo님의 프로필 이미지
Gyeongsu. Seo

작성한 질문수

질문하기