반응형
데이터베이스에서 사용되는 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로 지정되어 있어야 한다.
반응형
'IT > Database' 카테고리의 다른 글
데이터베이스 테이블 합집합, 차집합(UNION, UNION ALL, MINUS, INTERSECT, EXCEPT) (46) | 2023.06.25 |
---|---|
LAG, LEAD 함수에 대해서 (44) | 2023.06.21 |
CLOB 타입 (28) | 2023.05.31 |
데이터베이스 최적화 방법 2 (23.04.28) (22) | 2023.04.29 |
데이터베이스 최적화 방법 1 (23.04.27) (9) | 2023.04.29 |
댓글