RevDev

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

· 2020-11-27 (금) 10:36:59 · 4505 · 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에서 해주시기 바랍니다.

+
분류 제목 글쓴이 날짜 조회
MySQL 21-04-20 조회 2,510
기타 21-04-18 조회 3,339
MySQL 21-04-17 조회 2,684
MySQL 21-04-16 조회 2,378
MySQL 21-04-15 조회 2,147
MySQL 21-04-15 조회 1,994
OS 21-03-31 조회 5,281
웹서버 21-03-24 조회 2,863
웹서버 21-03-18 조회 2,864
웹서버 21-03-11 조회 3,077
웹서버 21-03-08 조회 2,402
웹서버 21-03-02 조회 2,845
웹서버 21-03-02 조회 3,222
MySQL 21-02-25 조회 3,639
웹서버 21-02-17 조회 8,133
웹서버 21-02-13 조회 2,247
OS 21-01-20 조회 7,431
PHP 21-01-12 조회 5,363
JavaScript 21-01-12 조회 3,005
MySQL 20-11-27 조회 4,506
MySQL 20-11-25 조회 3,707
PHP 20-11-24 조회 2,968
PHP 20-11-23 조회 3,940
PHP 20-11-19 조회 5,038
PHP 20-11-13 조회 5,264
웹서버 20-09-26 조회 7,921
기타 20-08-07 조회 5,858
MySQL 20-08-05 조회 3,891
기타 20-07-15 조회 2,928
기타 20-07-14 조회 3,547