본문 바로가기

DataBase/Mysql

[ mysql ] merge update insert

반응형

프로젝트를 하다보면 oracle로 할 때가 있고 mysql로 할 때가 있다.

하지만 서로 쿼리가 다른 것들이 많다. 그 중 하나가 오늘 포스팅할 개념이다.

 

먼저 테이블을 생성합니다.

| 테이블 생성

CREATE USER(USER_ID VARCHAR(20),
    USER_NAME VARCHAR(20),
    USER_TEL VARCHAR(13),
    PRIMARY KEY(USER_ID)
);

 

그 다음에, 예시를 위해서 데이터를 넣어보겠습니다.

| 데이터 삽입

INSERT INTO USER(USER_ID, USER_NAME, USER_TEL) 
VALUES('imcodding0616', 'codding', '010-1234-5678');

 

USER_ID USER_NAME USER_TEL
imcodding0616 codding 010-1234-5678

그럼 위와 같이 데이터가 삽입됩니다. USER_ID가 기본키가 되는데, 이 키를 이용하여 merge문을 실행합니다.

| Merge 문

merge문은 테이블에 넣으려는 데이터의 값이 존재하면 update 하고, 존재하지 않으면 insert하는 구문입니다.

INSERT 구문
ON DUPLICATE KEY UPDATE
UPDATE 구문

 

예를 들어보겠습니다. 

INSERT INTO USER(USER_ID, USER_NAME, USER_TEL)
VALUES('imcodding0616', 'insert_name', '010-1234-5678')
ON DUPLICATE KEY UPDATE
UPDATE USER_NAME = 'update_name';

 

USER_ID USER_NAME USER_TEL
imcodding0615 update_name 010-1234-5678


위처럼 실행했을 경우 나오는 데이터입니다.

USER_ID의 값이 'imcodding0615'인 값이 존재하기 때문에, update문이 실행된 것입니다.

 

INSERT INTO USER(USER_ID, USER_NAME, USER_TEL)
VALUES('cococo123', 'insert_name', '010-0000-0000')
ON DUPLICATE KEY UPDATE
UPDATE USER_NAME = 'update_name';

 

USER_ID USER_NAME USER_TEL
imcodding0616 update_name 010-1234-5678
cococo123 insert_name 010-0000-0000

위처럼 실행했을 경우 나오는 데이터입니다.

USER_ID의 값이 'imcodding0615'인 값이 존재하지 않기 때문에, insert문이 실행된 것입니다.

 

이처럼 merge문은 key값의 존재유무로 insert 할 것인지 update 할 것인지 판단하고 실행합니다.

알아두면 유용하니까 잊지마세요!

 

감사합니다. 도움이 돼셨다면 좋아요 꾸욱!

 

oracle merge into

 

반응형