mysql/MariaDB INSERT시 중복키 관리방법 (ON DUPLICATE KEY UPDATE) > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

mysql/MariaDB INSERT시 중복키 관리방법 (ON DUPLICATE KEY UPDATE) 정보

MySQL mysql/MariaDB INSERT시 중복키 관리방법 (ON DUPLICATE KEY UPDATE)

본문

검색하다보니 없는거같아서 남깁니다.

 

대부분 아시겠지만 데이터가 있으면 update하고 없으면 insert 하는구문..

간혹 필요한데 자주안쓰다보니 까먹더라구요.

데이터가 있으면 update하고 없으면 insert 하는구문..

 

예를들어 상품 테이블이 아래와 같고

goods_no primary key auto_increment  
goods_code varchar(20)  
goods_name varchar(50)  

 

이미 아래 데이터가 존재할경우

goods_no goods_code goods_name
1 A00001 모하비고스트

 

INSERT INTO 상품테이블 (goods_code, goods_name)

VALUES('A00001', '모하비고스트향수')

ON DUPLICATE KEY UPDATE goods_name='모하비고스트향수';

 

쿼리를 실행하면

goods_name부분이 '모하비고스트향수'로 바뀔거 같지만

계속 INSERT만 됩니다.

 

 

중요한건 UNIQUE INDEX

 

goods_no primary key auto_increment  
goods_code varchar(20) UNIQUE INDEX
goods_name varchar(50)  

 

요렇게 하면 의도하는 대로 상품명만 '모하비고스트향수'로 바뀌게됩니다.

 

 

중복키관리는 이거외에 REPLACE INTO와 INSERT IGNORE가 더 있는데..

REPLACE INTO 는  기존데이터 삭제후 INSERT 하는 방식이라 고유 id값을 다른부분에서 사용한다면

골때리는 상황이 발생할수가 있습니다.(직접겪었.. ㅠㅠ)

INSERT IGNORE 는 중복 에러발생시 입력을 무시하는 방식. 

 

그래서 on duplicate update 방식이 젤 좋은방식이 아닌가 생각됩니다.

 

예전에 어떤 사이트에서 on duplicate update 를 퍼포먼스 등의 문제로 사용하지 말라는 글을

얼핏 보긴했는데 해당부분을 다시 찾아봤는데 못찾겠네요.

혹시 찾으시면 공유 부탁드립니다^^;

 

추천
4

댓글 6개

이거 사용할 때 주의해야 할 점이 auto_increment 를 무조건 +1 시킵니다.
있어도 없어도 무조건 1개의 쿼리로 보고 auto_increment 를 증가시킵니다.
last_insert_id 를 사용해야 하는 경우가 있다면 주의가 필요합니다.

https://sir.kr/pg_tip/16737
이거랑 같이 보면 좋을듯 싶네요.
replace into 는 auto_increment 증가시키는걸로 알고있는데
on duplicate update도 그런가요?
한번더 확인해보겠습니다.  감사합니다!^^
저도 그랬던걸로 기억하고 있었는데 프로그램 짤 때 이상하게 last_insert_id 가 안맞더라구요.
음...1여년 전에 짠거라 제 기억이 잘못되었을 수도 있겠네요. 저도 소스 다시 한 번 뒤져봐야겠습니다. (날이 갈수록 기억력이 떨어지네요.ㅠㅠ)
전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT