| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 한글 특수문자 자바스크립트
- 자바스크립트 깨질 때
- 외부 톰캣 특수문자 깨질 때
- jqxWidget워터마크
- 존폴결혼반지
- integrationtest
- 존폴반지
- 분산파일
- 추천시스템steam
- 존폴쥬얼리
- dialtimeout
- 스팀 게임 스코어 알고리즘
- 스프링단위테스트방법
- cookie refreshToke
- spring unit test
- LLM기반CBF
- set-cookie 안만들어짐
- Akamai 연구결과
- LLM기반 콘텐츠 추천
- 분산파일시스템
- tomcat튜닝
- jsp permission denied
- jqx워터마크제거
- jsp 예외 permission
- dial timeout
- 존폴결혼예물
- steam game score
- 동시 요청 처리
- staem algorithm
- 비개인화추천모델
- Today
- Total
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 에러가 발생한 것이다.
[ 느낀 점 ]
실무를 하면서 느끼는 점은 문제를 만나는 것은 정말 좋은 일이라는 것이다.
왜냐하면 문제를 해결하기 위해 내가 기존에 알던 지식을 너머 새로운 지식들을 내 것으로 만들 수 있기 때문이다.
지식으로만 알던 것들을 체득하는 과정이랄끼?
앞으로도 문제를 피하는 개발자가 아닌 문제를 해결하는 개발자가 되고 싶다.
'데이터베이스' 카테고리의 다른 글
| [ mariadb ] EXPLAIN 실행 계획 조회 명령어 공부 #1 (0) | 2026.01.05 |
|---|---|
| [ MySQL ] 실행 계획을 분석하는 방법 (0) | 2025.03.19 |
| [ Database ] 데이터에 접근하는 방법은 어떻게 결정할까? (0) | 2024.10.12 |
| 정규화 좀! 쉽고 간단하고 명료하게 정리해보자 (1) | 2024.10.04 |