반응형
프로젝트를 하다보면 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
반응형
'DataBase > Mysql' 카테고리의 다른 글
[ mysql ] with recursive 문법 (+ 프로그래머스 특정 세대의 대장균 찾기) (0) | 2024.04.09 |
---|---|
[ mysql ] join using 과 on 차이(각각 어디에 적절한가?) (0) | 2023.05.24 |
[ mysql ] 예시로 보는 인덱스 (Index) 개념 완전 이해하기 (0) | 2023.01.05 |
[ mysql ] 기본키(Primary Key) 와 유니크키(Unique Key) 차이 (0) | 2022.01.25 |
[ mysql ] select insert 문법 + duplicate key 기본키 중복 해결 (1) | 2021.12.08 |