Select for update locking
Select for update 시 lock 을 걸어 원 데이터를 버장힌다는 것은 이해 하였습니다그렇다면 a|b 가 동시 접근 하여 서로 다른 값으로 변경하려는 부분은 없고 동일 프로세스가 두번 진입 할 수 있다고 가정한다면어차피 update 시 xlock이 row에 대하여 획득하니select for update 는 필요없는게 맞다라고 이해를 했습니다이 부분이 맞을까요?
답변 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 사용이 필요한 경우가 많습니다.
더 자세한 상황이나 예시에 대해서 궁금하시면 관련 전문 문서를 참고하시거나, 데이터베이스 관리에 관한 전문 강의를 수강하는 것도 좋은 학습 방법일 것입니다.
Commit 응답받기 전 네트워크 문제가 발생하면
1
63
1
14분44초에 쿼리 질문드립니다.
0
71
2
ep12. (2) LEFT JOIN 사용 방법 준수 - 오타 질문
0
75
2
ep.12 count(*) 질문
0
67
2
레코드 수정시 저장공간이 부족하면
0
81
2
복합 index 문의
0
87
2
강의
0
82
1
LEFT JOIN 시 드라이빙 테이블을 왜 ALL로 읽나요?
0
106
2
GAP 락에 대한 질문 드립니닷..!
0
194
1
ORDER BY가 필요한 이유
0
177
2
[오타 제보] 선행 데이터를 기반으로 한 데이터 분석
0
165
1
2강. VARCHAR(255) 저장되는 데이터의 길이 정보 질문
0
448
2
LIMIT, OFFSET을 사용하는 것과 범위 기반 방식의 성능 차이
0
319
2
MySQL Where절 내 조건의 순서
0
393
2
1강. delete marking된 데이터의 정리 주기는 어느 정도인가요?
0
238
2
Mysql table avg_row_length
0
144
1
12강 FULL GROUP BY
0
135
2
ep11) Prepared Statement에서 질문
0
145
2
7)select for update 강의에서 질문
0
229
2
12강. LEFT JOIN 사용 방법 준수 5:42
0
239
2
6강. Top N 데이터 조회와 관련해 질문있습니다.
0
195
2
5강에서 사례로 언급하신 DETERMINISTIC 예제에 대해 질문있습니다.
0
145
1
deternmistic 질문
0
174
2
1강 CHAR타입에 대해 질문드립니다
0
230
1





