티스토리 뷰

특정 기본키가 없으면 insert를, 있으면 update를 쳐야하는 경우가 종종 존재한다.

이때마다 애플리케이션단에서 단순하게는 if문을 사용하여 처리했었는데 mysql에 이미 이런 구문이 있는걸 알게되었다.

insert문에 on duplicate key update 옵션을 사용하거나 replace 문을 사용하면 된다.



INSERT INTO test(col1, col2) VALUES('a', 'b') ON DUPLICATE KEY UPDATE col1 = 'a';

REPLACE test SET col1 = 'a', col2 = 'b';


둘다 처음 보는 문법이라하더라도 기존에 SQL을 어느정도 사용했던 사람이라면 직관적으로 알 수 있을거라고 본다(혹시 모르겠으면 댓글을...).


비슷한 용도기때문에 뭘 써야할지, 그리고 무슨 차이가 있는건지 궁금할 수 있는데 on duplicate key update 같은 경우 우리가 기대하는대로 update가 실행되게 되고, replace 같은 경우는 기본키가 중복될경우 해당 로우를 삭제하고 재추가 하게된다.

때문에 데이터 자체는 update 된것처럼 보인다하더라도 실제 데이터는 완전히 다른 데이터가 들어가게되는것이다.


결과는 뭘써야할지 잘 모르겠으면 on duplicate key update 쓰면 된다. 끝.

'DataBase' 카테고리의 다른 글

자주사용하는 쿼리 모음  (0) 2016.12.30
DB 락 타임아웃 확인  (0) 2016.12.30
on duplicate key update, replace문의 용도와 차이점  (0) 2016.12.26
MYSQL 에러들  (0) 2016.02.15
WorkBench에서 한글 사용하기  (1) 2015.11.15
생성된 인덱스 확인방법  (0) 2014.12.10
댓글
댓글쓰기 폼