동시저장 막기.. 1 6 2,199

by 동동동 [Oracle 기초] Oracle [2021.08.04 09:20:17]


안녕하세요...이런 질문 올려도 되는지 모르겠지만 조언을 얻고자 글을 올립니다..

 

A라는 테이블에 다음과 같은 칼럼이 존재하는데요..

SEQ        -- PK : 시퀀스 자동증가..

CODE      -- 유일해야 함

...

A테이블에 CODE는 유일해야 하는데 SEQ라는 시퀀스번호 칼럼이 PK로 잡혀있는 상태입니다.

그러다 보니 두대의 컴퓨터에서 같은 CODE를 동시에 저장시 시퀀스가 증가되면서 CODE가 두개가 저장 되고 있습니다.

자바 로직에서 저장전 같은 CODE가 존재하는지 SELECT를 한번 태우지만 동시에 저장시 저장이 되고 있습니다.

처음부터 설계가 잘못된채 사용중이라...PK를 CODE로 변경하면 되겠지만...

그전에 뭔가 DB적으로 막을 수 있는 다른 방법이 있을까요?

 

조언 부탁드립니다...

 

by 축구쟁이 [2021.08.04 09:30:36]

해당 테이블이 어떻게 사용되는지 알아야 가장 좋은 수정 방안이 도출되겠지만

중복 저장을 막기 위해서는 여러가지 방법이 있습니다.

1. PK를 단일키(CODE) 또는 복합키로 설정(SEQ + CODE)

2. CODE 컬럼에 대한 Index를 Unique로 생성

3. 데이터 입력 단계에서 중복 방지 로직 삽입


by 동동동 [2021.08.04 10:50:56]

축구쟁이님 답변 감사드립니다..^^


by 마농 [2021.08.04 10:00:43]

UNIQUE 제약조건을 설정하거나 http://gurubee.net/lecture/1013
UNIQUE INDEX 를 만들거나 http://gurubee.net/lecture/1035


by 동동동 [2021.08.04 10:51:15]

마농님 답변 감사드립니다..^^


by 우리집아찌 [2021.08.05 15:34:27]

시퀀스가 왠만해서 중복되기가 쉽지 않을텐데요

동접자가 얼만지는 모르겠으나 제 경험으로은 중복보다 로직상에 다른 문제이지 않을까 조심스럽게 추측해봅니다

 

 


by 동동동 [2021.08.05 17:29:03]

우리집아찌님 답변 감사드립니다.

시퀀스는 중복이 안되는데..실제 CODE가 하나만 있어야 하는데 PK가 아니라서요..ㅠㅠ

위에서 알려주신데로 제약조건 추가로 해결 됬습니다...^^

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