2018년 11월 3일 토요일

MariaDB/MySQL insert / update / ON DUPLICATE KEY UPDATE

이미 존재하는 프로젝트를 분석하는 작업을 진행중인데, 아무래도 실무자들이 여럿 붙어 만든 프로젝트이며, 포기했던 스프링이다 보니 신기한 부분이 한둘이 아닙니다.

그중 오늘은 재미난 것을 발견했는데 바로 쿼리문 중에 등장한
ON DUPLICATE KEY UPDATE
입니다!

INSERT INTO MYTABLE (foo,bar,hello,world)VALUES (1,2,3,4) 까지는 아주 친숙한데, 이 뒤에 추가 쿼리가 있었습니다!

INSERT INTO MYTABLE (foo,bar,hello,world)VALUES (1,2,3,4) ON DUPLICATE KEY UPDATE UPDATE  foo = 1 , bar = 2 , hello = 3 , world = 4

베리마취하게 마취되어(?) 검색을 좀 때려봤고 매우 마음에 드는 쿼리문을 찾게 되었습니다.

현제 1.0 jellojay 에서는, 아직까지 등록되지 않은 table row 인 경우, insert를 하고, 이미 존재하는 데이터인 경우 update 문을 하게 설계가 되어있습니다. 즉 백단에서 해당 table row의 존재여부부터 확인한뒤, insert와 update에 해당하는 두개의 함수를 만들어 운용하고 있었습니다.

하지만 이런 수고스러움을해결하고자 하여 사용되는것이 바로 ON DUPLICATE KEY UPDATE
였습니다. 이정도 까지 읽었다면 다들 어느정도 어떤 기능인지 납득이 되기 시작할 것 입니다.

해당 TABLE의 KEY값이 이미 중복으로 존재한다는것이 확인이 되면,
INSERT에서 에러를 뿜고 끝내는게 아닌, 해당 KEY값의 ROW를 UPDATE 시켜버리는것 입니다.

이 얼마나 갓 쿼리문인가..난 이런것도 모르고..흐극..
이런 기능은 인기있는 대부분의 db에 존재하는것 으로 보이니, 현제 사용중인 DB가 다르다고 좌절하지 마시고 본인의 DB에서도 같은 기능을 하는 문법을 알아보심을 추천함미다.

댓글 없음:

댓글 쓰기