RevDev

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

· 2020-11-27 (금) 10:36:59 · 4510 · 6

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

 

대부분 아시겠지만 데이터가 있으면 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 를 퍼포먼스 등의 문제로 사용하지 말라는 글을

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

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

 

|

댓글 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여년 전에 짠거라 제 기억이 잘못되었을 수도 있겠네요. 저도 소스 다시 한 번 뒤져봐야겠습니다. (날이 갈수록 기억력이 떨어지네요.ㅠㅠ)
감사합니다 얼떨결에 예전에 한번 써봤던거 같은데 잊고 있었네요
2020-12-01 (화) 13:03:00
좋은정보 감사합니다.
2020-12-07 (월) 21:00:40
감사합니다
댓글을 작성하시려면 로그인이 필요합니다.

개발자팁

5,403건

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

+
분류 제목 글쓴이 날짜 조회
node.js 19-01-11 조회 2,852
node.js 19-01-10 조회 2,583
node.js 19-01-10 조회 2,681
node.js 19-01-10 조회 2,398
node.js 19-01-09 조회 2,631
node.js 19-01-09 조회 2,768
node.js 19-01-09 조회 3,009
웹서버 19-01-04 조회 3,518
PHP 18-12-18 조회 2,840
웹서버 18-12-07 조회 2,443
JavaScript 18-12-06 조회 3,193
node.js 18-11-29 조회 4,306
기타 18-11-20 조회 4,850
기타 18-11-19 조회 2,860
기타 18-11-19 조회 2,574
기타 18-11-19 조회 2,621
Mobile 18-11-09 조회 2,850
JavaScript 18-11-08 조회 2,857
기타 18-11-08 조회 2,865
jQuery 18-11-06 조회 3,102
PHP 18-10-31 조회 5,886
jQuery 18-10-29 조회 5,760
기타 18-10-12 조회 3,349
MySQL 18-10-11 조회 4,737
기타 18-10-11 조회 2,829
웹서버 18-10-07 조회 3,044
MySQL 18-10-04 조회 2,828
MySQL 18-10-02 조회 3,304
JavaScript 18-10-02 조회 1.1만
웹서버 18-09-29 조회 2,969