검색하다보니 없는거같아서 남깁니다.
대부분 아시겠지만 데이터가 있으면 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개
있어도 없어도 무조건 1개의 쿼리로 보고 auto_increment 를 증가시킵니다.
last_insert_id 를 사용해야 하는 경우가 있다면 주의가 필요합니다.
https://sir.kr/pg_tip/16737
이거랑 같이 보면 좋을듯 싶네요.
on duplicate update도 그런가요?
한번더 확인해보겠습니다. 감사합니다!^^
음...1여년 전에 짠거라 제 기억이 잘못되었을 수도 있겠네요. 저도 소스 다시 한 번 뒤져봐야겠습니다. (날이 갈수록 기억력이 떨어지네요.ㅠㅠ)