[기본키 동시 저장 연관] 0 9 1,101

by DB_SQL [SQL Query] 기본키 동시성 [2023.05.24 10:05:31]


웹에서 회원등록 할 때 회원 아이디만 키값이라고 하면 회원 가입페이지에서 중복체크를 하더라도 저장을 누르는 순간에 DB에 insert되는 시스템이 있습니다. (예시입니다)

 

이런 시스템을 사용하는 두 명의 사용자가 있는데, 굉장히 낮은 확률이겠지만 두 명이 같은 아이디를 입력하고 '저장' 버튼을 동시에 누르면 무결성 오류가 날텐데 이런 경우는 어떻게 처리하면 좋을까요?

 

 

by 마농 [2023.05.24 10:39:18]

PK 설정을 했다면? 1명은 성공하고, 한명은 실패하겠지요.
실패한 사람은 중복 메세지 띄우면 됩니다.


by DB_SQL [2023.05.24 11:07:11]

이해를 돕기 위한 예시일 뿐입니다. 더 복잡한 상황인데, 단순화 시켜서 다음과 같이 표현했습니다. 

만약에 회원 아이디가 100으로 입력했는데 동시에 입력해서 한 명은 성공하고 다른 한명도 시스템으로 101로 처리해줘야 한다면, 이렇게도 가능한가요??(자바 언어)


by 우리집아찌 [2023.05.24 10:56:06]

pk설정이 곤란하다면 unique index ..


by DB_SQL [2023.05.24 11:11:39]

일단 반드시 PK로 해야하긴 하고, 둘이 동시에 저장할 경우에 저장 실패한 다른 한 사람의 값을 1 올려주면서 저장하도록 하는 방법을 고려 하려고 합니다. 방법이 없을까요?


by 동동동 [2023.05.24 11:25:14]

아이디만 키값으로 예시를 하셨는데..자신이 정한 아이디가 아닌 중복이 나서 +1한 아이디로 저장되게 하면 그게 더 이상하지 않을까요?


by DB_SQL [2023.05.24 11:34:22]

정확히 말씀드리겠습니다. 회원 가입을 할 때 이 회원을 관리하는 키값이 회원 아이디가 아니라 다른 등록번호인데, 등록번호의 경우는 회원 본인은 모릅니다.

다른 더 복잡한 상황이 있는데 구구절절이 쓰기가 어려워서 상황을 단순화 시켜 말씀드렸습니다.

정확히 말씀드리면, 회원가입을 할 때 등록번호가 중복될 경우 문제가 될 수 있는데 이 등록번호를 자동으로 1 증가시키는 방법도 있을 수 있나 싶습니다.

예를 들어, 100명이 가입을 하면
등록번호가 원래는 시간 순차적으로 1,2,3,.... 증가하는데

100명이 동시에 가입을 한다면 자신은 회원체크도 이미 한 상황이기 때문에 등록번호 때문에 튕겨나가야 할 일은 없어야 할 것입니다.
그래서 자바에서 자동으로 이런 경우가 발생할 때 1씩 증가시키도록 가능한지 여쭙니다. 


by 우리집아찌 [2023.05.24 13:50:59]

처음 질문과 차이가 좀 있네요.

오라클경우는 sequence 기능이 있고

sql-server , my-sql 는 auto increment 같은 기능 사용하시면 됩니다.

그리고 회원 아이디가 변경가능하다는 조건이 있으면 회원등록번호(인조키)로 사용하는 경우가 있습니다.


by DB_SQL [2023.05.24 14:14:20]

감사합니다 !!


by 마농 [2023.05.25 09:23:45]
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입