상세 컨텐츠

본문 제목

MySql 의 ON DUPLICATE KEY UPDATE 예제 (UPSERT)

DB/MySql

by husks 2014. 3. 10. 11:19

본문

반응형

예전에 MongoDB 책을 보다가 UPSERT 기능을 본 적이 있습니다.

UPSERT 기능은 INSERT와 UPDATE를 결합 한 기능으로 데이터를 INSERT 하다 중복 오류가 발생하면 지정한 컬럼을 UPDATE 해주는 기능입니다.

해당 기능이 편해 보여서 다른 DB도 유사한 기능을 제공하는지 확인 했었는데 MySql, Oracle, MSSQL에서도 제공 하는 기능 이었습니다.

아래는 DB별 UPSERT 명령어 입니다.

MySql => ON DUPLICATE KEY UPDATE

Oracle => MERGE INTO 오라클은 여기 참고 하세요. http://huskdoll.tistory.com/195

MSSQL => IF NOT EXISTS

프로젝트 시 해당 기능을 유용하게 사용한 적이 있습니다.

UPSERT 기능을 프로그래밍으로 처리 하자면..

1. 입력하려는 데이터의 KEY를 조건절로 SELECT 구문을 실행

2. 해당 결과 값 확인

3. 결과 값에 따라서 있다면 UPDATE, 없다면 INSERT 작업

로 말씀 드릴수 있습니다.

하지만 UPSERT는 위의 부분을 간단하게 쿼리로 처리해주는 기능 입니다.

자세한 설명은 해당 링크를 참고하여 주시기 바랍니다.

https://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

여기서는 MySql의 UPSERT 기능인 ON DUPLICATE KEY UPDATE 예제를 작성해 보겠습니다. (MySql 4.1 버전 이상부터 지원합니다.)

일단 BOOKS 테이블을 생성 하겠습니다.

1
2
3
4
5
6
7
8
9
10
CREATE TABLE BOOKS (
  ID VARCHAR(5NOT NULL,
  NAME VARCHAR(20NOT NULL,
  WRITER VARCHAR(20NOT NULL,
  PRICE DECIMAL(10,2DEFAULT 0,
  GENRE VARCHAR(20NOT NULL,
  PUBLISHER VARCHAR(20NOT NULL,
  CNT DECIMAL(10,0DEFAULT 0,
  PRIMARY KEY  (ID)
ENGINE=InnoDB DEFAULT CHARSET=utf8


그리고 ON DUPLICATE KEY UPDATE 를 이용하여 입력해 보겠습니다. (여러번)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
INSERT INTO BOOKS(
  ID,
  NAME,
  WRITER,
  PRICE,
  GENRE,
  PUBLISHER
VALUES (
  'A1',
  '홍길동전',
  '허균',
  300,
  '소설',
  '허균 출판사'
)
 ON DUPLICATE KEY UPDATE
 CNT = CNT+1

입력을 2번 이상 해보시면 CNT 의 숫자가 올라가는걸 확인하실 수 있습니다.

일반적인 INSERT 문과 동일하고 INSERT문 뒤에 ON DUPLICATE KEY UPDATE 를 붙인 후에 업데이트 할 컬럼을 작성 합니다.

저는 주로 데이터 업데이트 진행한 날짜를 기록하거나 카운트를 기록하는데 주로 사용 합니다.

반응형

'DB > MySql' 카테고리의 다른 글

MySQL 테이블 생성 스크립트 확인  (0) 2016.03.10
Mysql 디데이 계산 (d'day)  (0) 2015.01.28
Mysql replace  (0) 2014.12.31
Mysql 변수 선언 (ROWNUM)  (0) 2014.05.13
Mysql ADD COLUMN (ALTER문)  (0) 2014.03.24

관련글 더보기

댓글 영역