hola 개발

[ 문제 해결 ] Duplicate entry ... for key 'PRIMARY' (feat. 테이블에 기본키 값에 해당하는 데이터가 없는데? 본문

데이터베이스

[ 문제 해결 ] Duplicate entry ... for key 'PRIMARY' (feat. 테이블에 기본키 값에 해당하는 데이터가 없는데?

hola. 2025. 7. 2. 17:56

[ 문제 상황 ]

회사 동료가 해당 에러가 발생한다고 도와달라고 요청을 했다.

에러는 다음과 같았다.

ERROR 1062 (23000): Duplicate entry .... for key 'PRIMARY'

 

에러를 보고 음.. 그럼 테이블에 데어터를 넣을 때 기본키가 중복되어서 문제가 생겼나보구나.

일단 해당 데이터를 찾아내서 삭제를 해보고 다시 insert 시도를 했다.

하지만 여전히 에러가 발생하였다! 

 

헐.. 뭐지? 난 당연히 테이블에 있는 기본키와 중복 되는 값을 insert 해서 그런지 알았는데,,,? 하고 멘붕이 왔다...

그렇게 삽질의 시간이 시작 되었다...

몇 시간 후 ..

 

 

[ 문제 해결 ]

몇 시간동안 이것 저것 찾아보았다. 해당 문제에 대한 답변은 대부분 비슷했다.

'테이블 내에 프라이머키에 해당하는 값이 이미 존재하기 때문에 발생한 문제라는 것'

흐음 난 아닌데...하고 다시 코드를 천천히 파보았고 결국 답을 찾았다.

 

해당 에러는 프로시저에 발생하면서 생긴 문제였는데, 프로시저에서 커서를 사용할 때 생긴 문제였다.

커서를 사용한 문제라기 보다는 커서를 사용해서 다른 테이블로부터 데이터를 가져와 조합한 후 insert할 때 생긴 문제였다.

 

여기서 커서를 잠깐 설명하자면

커서 = 반복 가능한 SELECT 결과 집합이고 해당 SELECT 결과 집합을 루프 안에서 FETCH한 값을 다른 테이블에 INSERT 해준다는 것이다.

간단하게 말하면 새로운 데이터 조합을 만들어서 결과를 특정 테이블에 insert 해준다는 것!

 

문제는 커서로 만들어진 결과 값에서 중복값이 있었고, 해당 중복 값은 insert할 테이블에서는 기본 키에 해당 했기 때문에

duplicate 에러가 발생한 것이다.

 

 

 

[ 느낀 점 ] 

실무를 하면서 느끼는 점은 문제를 만나는 것은 정말 좋은 일이라는 것이다.

왜냐하면 문제를 해결하기 위해 내가 기존에 알던 지식을 너머 새로운 지식들을 내 것으로 만들 수 있기 때문이다.

지식으로만 알던 것들을 체득하는 과정이랄끼?

앞으로도 문제를 피하는 개발자가 아닌 문제를 해결하는 개발자가 되고 싶다.