검색하다보니 없는거같아서 남깁니다.
대부분 아시겠지만 데이터가 있으면 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개
게시글 목록
| 번호 | 제목 |
|---|---|
| 16619 | |
| 16618 | |
| 16612 | |
| 16603 | |
| 16598 | |
| 16589 | |
| 16578 | |
| 16571 | |
| 16563 | |
| 16554 | |
| 16546 | |
| 16534 | |
| 16527 | |
| 16520 | |
| 16513 | |
| 16510 | |
| 16505 | |
| 16498 | |
| 16490 | |
| 16486 | |
| 16482 | |
| 16465 | |
| 16458 | |
| 16456 | |
| 16448 | |
| 16447 |
PHP
한글 초,중,종성 분리하기
3
|
| 16440 | |
| 16439 |
웹서버
nginx 설치시 보안
3
|
| 16438 | |
| 16430 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기