잠바맨
311
2019-04-03 14:01:29
5
211

[MSSQL] 동시에 같은 데이타 SELECT 방지 (동시성 문제)


안녕하세요. 아래와 같은 쿼리문으로 고객에게 상품권코드(쇼핑몰 자체상품권)를 발급하고있습니다.
그런데 문제는 가끔 동시에 2사람에게 같은 코드가 발급되는 문제가 발생되고 있습니다.
전문용어로 "동시성"이 맞는지는 모르겠는데요, 
SELECT TOP(1).... 셀렉트 해오는 부분에서 0.01초 시간차로 2사람이 동시에 같은 SEQ를 검색해오는게 원인인거 같습니다.
이를 어떻게 해결해야 할지 조언좀 주시면 감사하겠습니다.

SET NOCOUNT ON

UPDATE TEST_TBL SET
	    USE	   = 'Y'
WHERE SEQ	   = ( SELECT TOP(1) SEQ FROM TEST_TBL WHERE CODE = '1000' AND USE = 'N' ORDER BY 
REG_DATE )

SELECT @@ROWCOUNT
0
0
  • 답변 5

  • 레버리지
    2k
    2019-04-03 15:14:05

    그 동시성 제어를 위해 시퀀스로 변경해보심을 추천드립니다.

    1
  • 잠바맨
    311
    2019-04-03 15:19:45

    답변 감사합니다.

    시퀀스로 변경이 어떤걸 말씀하시는지 잘 모르겠네요

    0
  • 포기해..
    768
    2019-04-03 15:33:41

    with(updlock) 검색해보세요

    1
  • 잠바맨
    311
    2019-04-03 15:50:18 작성 2019-04-03 15:55:39 수정됨

    답변 감사드립니다.

    with(updlock) 업데이트 락을 거는게 최선이겠네여.

    락은 처음 걸어보는데요 혹 락을 걸고

    따로 해제하는 구문이 들어가야 되는건지요?

    참고로 트렌잭션은 걸고 있습니다.


    0
  • 포기해..
    768
    2019-04-03 17:50:58

    데이타가 처리되고 커밋되는순간 락이 풀리는 것으로 알고 있습니다.

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.