( DATABASE ) mariaDB INSERT 사용시 중복(Duplicate Error) 해결
ZZOOO
·2021. 4. 13. 14:50
안녕하세요 오늘은 mariaDB를 사용할때에 한번쯤 겪을 수 있는 중복 에러에대하여 다루어보고자합니다.
mariaDB 공식 홈페이지에서 검색하여 문제를 해결했으나 기록 겸 혹여나 찾으시는분이 계실까 포스팅합니다.
상황
기존 본인의 DB에는 ( 고유번호 ) no = 71 번인 row가 있었습니다.
여기에 제가 구현하고자하는 기능은 단순히 정보 수정이 아닙니다.
암호화되어있는 어떤 문자열을 파싱하여 나온 값들을 확인 후 사용자가 등록을 요청하는 기능이였습니다.
하지만, 이미 등록이되어있는 상황이라면, UPDATE 기능을 사용하면되는데
그렇다면 최초등록을 할 수 없기에 다른 방법을 찾아봐야했습니다.
( 제가 처한 상황이 이해가 가지않으실 수 있습니다 . )
( UPDATE SET 구문을 사용했을때는 최초등록 기능을 구현할 수 없어 사용하지 못하였습니다. )
에러
Duplicate entry ~~~~~ for key 'PRIMARY' ...
해결 방법
mariadb.com/kb/en/insert-on-duplicate-key-update/
그래서 본인은 mariaDB 홈페이지에 접속하였습니다.
INSERT ON DUPLICATE KEY UPDATE
라는 Syntax를 사용할것입니다.
mariaDB Syntax
INSERT [LOW_PRIORITY | delayed | high_priority] [IGNORE]
[INTO] tbl_name [PARTITION (partition_list)] [(col, ...)]
{VALUES | VALUE} ({expr | DEFAULT}, ...), (...), ...
[ON DUPLICATE KEY UPDATE
col = expr
[, col = expr] ... ] [RETURNING select_expr
[, selecte_expr ...]]
mariadb 공식 홈페이지에서는 이와같이 설명하고있습니다 .
My Syntax
위와같이 설명되어있어서 개발 초보자분들 ( 미투.. ) 은 쪼끔 .. 난처할 수 있습니다 ㅋㅋㅋㅋㅋㅋㅋㅋ
최대한 쉽게 풀어보겠습니다.
INSERT INTO my_tbl (no, name, age, gender ... )
VALUES (1, 'ZZOOO', 24, 'M' ...)
ON DUPLICATE KEY UPDATE
no = '1이 중복이라면 업데이트할 번호', name = 'ZZOOO', 24, 'M' ...
WHERE '선택적 조건 추가하시면됩니다.'
한줄씩 살펴보면 ,
LINE 1 : my_tbl 에 no,name,age,gender 컬럼에 INSERT를 할 것이다.
LINE 2 : 순차적으로 1 , 'ZZOOO' .. 와 같은값을 넣겠다.
LINE 3 : 중복이면 ? INSERT가 아니라 UPDATE를 해라
LINE 4 : no = ' ?? ' .. UPDATE 할 값을 다음과 같은 형식에 맞게 나열해주시면 됩니다.
다음과 같이 직관적으로 이해할 수 있게 쿼리문이 짜여져있습니다.
프로젝트내에서 Duplicate 중복 에러가 발생했다면 에러내용을 꼼꼼히 확인하신 후 ,
DB에 접근하는 Query문이 짜여져있는 Class를 다음과 같은 형식으로 수정하신다면
해결이 될 수도있을것 같습니다. ( 제가 처한 상황과 같은 상황이여야겠지요 ?)
이렇게 mariaDB에서 INSERT 또는 UPDATE 시 DUPLICATE KEY 상황을 해결해보았습니다.
도움이되셨길 바라며 포스팅 마치겠습니다. 감사합니다.
'개발( Dev ) > 에러 ( Error )' 카테고리의 다른 글
( JAVA ) JAR ? WAR ? 차이점 알아보자 (1) | 2021.08.09 |
---|---|
( TOMCAT ) 톰캣 캐시 부족 현상 간단 해결 (0) | 2021.08.05 |
( error ) myBatis XML CDATA 에러 (0) | 2021.06.02 |
( DataTables ) Cannot reinitialise DataTable Error 해결 (3) | 2021.04.07 |
(Spring + Thymeleaf) Error SpelEvaluationException (0) | 2021.03.29 |