안녕하세요.
저희 시스템 중 잠금 기능을 DB로 제어하는 부분이 있는데요. 관련 내용 검색을 잘못 하는지 조회가 되질 않아.... DB 성지 구루비까지 오게 되었습니다.
이해가 되지 않는 부분은 볼드처리 하였습니다.
-- 해당 쿼리는 mybatis 문법이 포함되어 있습니다.
UPDATE LOCK_TABLE SET LOCK_MEMBER_SEQ = #{memberSeq} LOCK_DT = CASE WHEN #{memberSeq} IS NULL THEN LOCK_DT ELSE GETDATE() END WHERE CASE WHEN #{orginlPprEditSeq} IS NOT NULL AND PHOTO_YN = 'N' THEN ORGINL_PPR_EDIT_SEQ ELSE PPR_EDIT_SEQ END = CASE WHEN #{orginlPprEditSeq} IS NOT NULL AND PHOTO_YN = 'N' THEN #{orginlPprEditSeq} ELSE #{pprEditSeq} END
질문 -
1. UPDATE SET COLUMN 에 LOCK_DT 는 SELECTOR 된 ROW 의 LOCK_DT 를 가져와 다시 업데이트 하는 것인가요?
- 맞다면 값이 변하지 않을텐데...
- 제가 이해한 예는 pprEditSeq 의 값이 일치한 row 의 LOCK_DT 를 업데이트 하는 것이라고 이해하였습니다.
2. PHOTO_YN 의 쿼리 실행 순서가 어떻게 될까요?
- 테이블을 메모리에 올리고 WHERE 절에 조건으로 PK(인덱스라고 표현하는 것일까요?) SCAN으로 SELECT 쿼리를 조회한다고 보면 그냥 다를게 없는 where 절이 되는걸까요?
감사합니다!