본문 바로가기
IT/Database

upsert 란?

by 성준하이 2023. 6. 12.
반응형

데이터베이스에서 사용되는 DML 을 보면
insert / select / update / delete 에 대해서 많이 다뤄봤을것이다.

 

오늘 소개할 구문은 일반적인 DML은 아니고 , 또한 모든 DBMS 마다 존재하는것이 아니라서 잘 모를수도 있지만

알고있다면 효율적으로 작성이 가능한 문법인 

UPSERT 이다.

 

일반적으로 많이 사용하는 ORACLE, MYSQL/MARIA, POSTGRESQL 에 대한 UPSERT 문법에 대해서 정리하면 다음과 같다.

 

ORACLE의 경우 UPSERT

MERGE INTO dest_table_name [alias]
            USING (source_table_name or  view or subquery) [alias]
            ON (join condition)
WHEN MATCHED THEN
     UPDATE SET col1 = value1[, col2 = value2…]
WHEN NOT MATCHED THEN
     INSERT [(col1, col2, ... coln)] VALUES(value1, value2 ... valuen)

 

단일 테이블에 UPSERT 예제

MERGE INTO tablename USING dual ON ( val3 = in_val3 )
WHEN MATCHED THEN 
UPDATE SET val1 = in_val1, val2 = in_val2
WHEN NOT MATCHED THEN 
INSERT VALUES (in_val1, in_val2, in_val3)

 

MYSQL 의 경우 UPSERT  (MYSQL 4.1 이상 부터 지원)

INSERT INTO 테이블명 (컬럼1, 컬럼2) VALUES ('컬럼1값', '컬럼2값') ON DUPLICATE KEY UPDATE 컬럼2='컬럼2값'

위와 같은 쿼리일 경우 컬럼1이 테이블의 KEY로 지정되어 있어야 한다.

 

 

PostgreSQL 의 경우 UPSERT

INSERT
INTO
TABLE_NAME(COLUMN1, ...)
VALUES(VALUE1, ...) ON
CONFLICT (COLUMN1) DO
UPDATE SET
COLUMN2 = VALUE2

위와 같은 쿼리일 경우 컬럼1이 테이블의 KEY로 지정되어 있어야 한다.

반응형

댓글