사이트 내 전체검색
INSERT INTO 와 REPLACE INTO
로빈아빠
https://cmd.kr/server/1097 URL이 복사되었습니다.

본문

INSERT INTO 와 REPLACE INTO

with 4 comments

요즘 컴퓨터 관련 지식을 모두 스프링노트에

저장하다 보니 블로그에는 이런 글 쓰는것도 참으로 오랫만이다.

오늘 몇시간동안 삽질하면서 얻어낸 결과 이기에

추억으로 남기고자 포스트를 한다.

내가 오늘 하고자 햇던 디비 작업은 레코드의 삽입과 관련이 있는데

어떤 데이터를 입력하는데 이미 디비상에 존재하는 값이면

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

추가(2010-04-10)
아 깜빡했는데 저렇게 적용 하려면 중복되는 녀석이 unique 로 적용되어 있어야한다.
그러니까 위에서는 word 가 unique 설정 되어있어야 이명박이라고 했을때 search_count 가 업데이트 된다는거 
unique 인덱스 설정 안되어 있으면 그냥 insert 된다.
참고로 키워드에 이명박을 쓴것은 특정대선주자와 상관없음을 밝힌다.
그냥 본인이 작업중에 대선후보들을 넣고 테스트하다가 보니깐 저렇게 된것이다.
이명박으로 햇을때 latest_result 값이 커서 선택한것일뿐.


댓글목록

등록된 댓글이 없습니다.

1,139 (6/23P)

Search

Copyright © Cmd 명령어 18.224.54.120