머리말
MySQL 데이터베이스에서 데이터를 적재할 때 값이 이미 존재하다면 변경(Update) 존재하지 않다면 입력(Insert)하는 작업이 필요하다. 데이터베이스마다 다른 문법을 제공함으로써 이러한 작업을 수행할 수 있는데, 일반적으로 이러한 작업을 Update + Insert 두 키워드를 합쳐서 업설트(Upsert)라 부른다. 포스팅에서는 MySQL 데이터베이스에서 제공되는 문법을 기준으로 업설트 방법에 대해서 소개한다.
UPSERT = INSERT + UPDATE
MySQL에서 업설트를 위해 제공되는 문법은 아래와 같이 간단하다. 기본적으로 동작하는 방식은 쿼리에서 지정한 값을 입력하다가 키 값이 존재(Duplicate)할 경우 키 값을 제외하고 변경 작업을 수행하는 방식으로 동작한다. 주의할 점은 아래의 문법에서 ON DUPLICATE KEY UPDATE 절에는 키값을 제외한 컬럼들만 업데이트할 수 있다는 점이다. 중복 여부를 판단하는 기준이 키값이기 때문이다.
# Syntex
INSERT INTO WOOKOA(key1, key2, col1, col2) VALUES(val1, val2, val3, val4)
ON DUPLICATE KEY UPDATE col1 = val3, col2 = val4;
CREATE TABLE WOOKOA (
NAME VARCHAR(10),
PHONE VARCHAR(15),
ADDRESS VARCHAR(20),
EMAIL VARCHAR(50)
PRIMARY KEY (NAME, PHONE)
);
INSERT INTO WOOKOA(NAME, PHONE, ADDRESS, EMAIL)
VALUES('우코아', '010-xxxx-xxxx', '서울특별시', 'help@wookoa.com')
ON DUPLICATE KEY UPDATE ADDRESS = '서울특별시', EMAIL = 'help@wookoa.com';
INSERT INTO WOOKOA(NAME, PHONE, ADDRESS, EMAIL)
VALUES('우코아', '010-xxxx-xxxx', '인천광역시', 'help@wookoa.com')
ON DUPLICATE KEY UPDATE ADDRESS = '인천광역시', EMAIL = 'help@wookoa.com';
위 스크립트 예제와 같이 수행하면 첫 번째 INSERT 문에서 데이터는 입력이 이루어질 것이고, 두 번째 INSERT 문에서는 중복된 키값으로 인해 ON DUPLICATE KEY UPDATE 절에서 지정한 값으로 업데이트가 수행될 것이다. 생성한 WOOKOA 테이블을 조회해 보면 주소 값이 인천광역시로 변경된 것을 확인할 수 있다.
꼬리말
upsert 존재를 알고 있다면 매우 간단하게 구현이 가능하지만 존재를 모르고 있다면 오랜 시간을 헤맬 수 있는 문법이다. 다른 데이터베이스의 경우도 비슷하게 처리가 가능하며 대다수의 데이터베이스에서도 upsert는 충분히 지원이 가능하기 때문에 어렵지 않게 찾아서 upsert 기능을 구현할 수 있을 것이다. 본 포스팅에서 소개하는 ON DUPLICATE KEY UPDATE 절은 MySQL 4.1 이상 버전에서만 지원 가능하기 때문에 수행 전에 버전을 체크해 보길 권장한다. MySQL 데이터베이스에서 값의 존재 여부에 따라 INSERT, UPDATE를 동시에 수행하는 UPSERT 방법에 대해서 소개한 본 포스팅은 이로써 마무리를 짓도록 한다.
소중한 댓글 (0)