본문
INSERT INTO 와 REPLACE INTO
요즘 컴퓨터 관련 지식을 모두 스프링노트에
저장하다 보니 블로그에는 이런 글 쓰는것도 참으로 오랫만이다.
오늘 몇시간동안 삽질하면서 얻어낸 결과 이기에
추억으로 남기고자 포스트를 한다.
내가 오늘 하고자 햇던 디비 작업은 레코드의 삽입과 관련이 있는데
어떤 데이터를 입력하는데 이미 디비상에 존재하는 값이면
search_cout 항목에 +1 을 해주고 존재하지 않으면 insert 하는 것이었다.
이러한 작업을 간단하게 하는것이 REPLACE INTO 였다.
이미 존재하면 UPDATE 하고 그렇지 않으면 INSERT 하는
하지만 겉으로 보기에만 저랬었다.
REPLACE INTO 는 실제로는 DELETE 한후에 INSERT 하였다.
내가 경험하기로는 무조건 !!!
항목중에 auto_increment 가 붙어있는 항목이 잇었는데
단순히 UPDATE 를 하고자 REPLACE INTO를 했는데
해당 항목이 증가해있는것이었다.
REPLACE INTO 의 문제는 저것 뿐만이 아니었다.
무조건 DELETE 하고 INSERT 하다보니 성능상에도 문제가 있다는 의견이 많이 보였다.
- 관련의견 : http://dev.mysql.com/doc/refman/5.0/en/replace.html 페이지 하단 코멘트 부분
그리고 결정적으로 내가 하고자 하는 바였던 count의 1증가가 안되었다.
REPLACE INTO `wf_word_info` SET `word` = ‘이명박’, `search_count` = `search_count` + 1 ,`latest_result` = ’1313′
위와 같이 하면 이미 이명박이라는 값이 존재하므로 search_count를 1증가시켜줄것이라고 생각했지만
그렇지 않았다. search_count 는 계속 기본값으로 설정되어버렸다.
그래서 REPLACE INTO 뒤에 SELECT 도 해보았지만
REPLACE INTO `wf_word_info` SELECT ‘이명박’, `search_count`+1, 32 FROM `wf_word_info` WHERE `word` not in (SELECT `word` from `wf_word_info`)
기존의 값에는 잘 적용되지만 새로운 값이 추가될때는 search_count 값이 이상하게 나왔다.
또다른 방법으로 REPLACE DELAYED INTO 라는것도 있었다.
이건 무조건 DELETE 후에 INSERT 가 아니라 새로운값은 INSERT 기존값은 UPDATE 해준다고한다.
하지만 본인의 환경에서 SQL 실행한결과 구문오류가 발생하여서 사용할수 없었다.
본인의 환경은 MYSQL 5.0.32 , InnoDB 였다.
-참고사이트 : http://www.linuxchannel.net/board/read.php?table=alpha&no=68&page=4
결국 내가 택한 방법은 MYSQL 레퍼런스를 참고로해서
INSERT INTO … ON DUPLICATE KEY UPDATE 였다.
여기저기 문서를 찾으면서 저 항목을 많이 봤지만 무시하다가
다시 천천히 보니깐 내가 원하는 거였다. -_-; 참으로 안타깝다.
결국 마지막 SQL 은 다음과 같았다.
INSERT INTO `wf_word_info` (`word`,`search_count`,`latest_result`) VALUES (‘이명박’,1,1313) ON DUPLICATE KEY UPDATE `search_count`=`search_count`+1;
음 아주 잘된다 ^^
-참고사이트 : http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
그냥 본인이 작업중에 대선후보들을 넣고 테스트하다가 보니깐 저렇게 된것이다.
이명박으로 햇을때 latest_result 값이 커서 선택한것일뿐.
관련링크
- http://seapy.com/97 2138회 연결
댓글목록
등록된 댓글이 없습니다.