데드락이 발생하여 해당 찾아보던 중 MERGE가 의심되서 질문드립니다.
Merge문을 이용해 Update 혹은 Insert를 할때 락은 어떤식으로 걸리나요?
--테이블 구조
--tA 테이블 -> (UserID, DataID, Data)
--tB 테이블 -> (DataID, Data)
MERGE tA --(1)
USING tB --(2)
ON tA.UserID = @User AND tA.DataID = tB.DataID --(3)
WHEN MATCHED THEN
UPDATE SET tA.Data = tB.Data --(4)
WHEN NOT MATCHED THEN
INSERT (UID, UID2, Data) --(5)
VALUES (@User, tB.DataID, tB.Data)
위 쿼리처럼 되어있으면 락이 어떤식으로 걸리나요??
해당 쿼리를 하나로 묶어서 한번 락이 걸리는건가요?
아니면 INSERT, UPDATE, SELECT등으로 나눠서 한번씩 락을 걸고 푸는 방식인가요?
일단 저는 락에 대해서 경험이 전무하고 개념만 살짝 이해하고있습니다 ㅠㅠ
자세하게 설명은 못해주시더라도 제가 보여드린 예시에서 맞다 아니다 1번 3번걸린다 이런식으로라도 답변 주시면 감사하겠습니다.
|