728x90
1. Upsert(Update + Insert)란?
- Upsert는 중복되는 값이 있다면 Update를 하고 중복되는 값이 없다면 Insert를 하는 쿼리
- Unique Key의 값이 중복된다면 Update를 하고, Unique 컬럼의 값이 존재하지 않는다면 INSERT를 하는 것
- Unique Key, 즉 중복되면 값이 있으면 안되는 컬럼에 추가하려는 데이터 값이 중복되지 않으면, INSERT 중복이 된다면, 중복의 대상이 되는 데이터 값을 UPDATE시키는 것(기준은 Unique Key 컬럼이다)
2. Upsert MySQL vs PostgreSQl
1. MySQL
INSERT INTO users (col1, col2) VALUES ('val1', 'val2') ON DUPLICATE KEY UPDATE col1='updateval1', col2='updateval2';
2. PostgreSQL(ver 9.5 이상)
INSERT INTO table1 (col1, col2)
VALUES ('val1', 'val2')
ON CONFLICT(col1, col2)
DO NOTHING;
--중복이 있을 경우 아무것도 안함.
INSERT INTO table1 (col1, col2)
VALUES ('val1', 'val2')
ON CONFLICT (UNIQUE KEY column)
DO UPDATE
SET col2 = EXCLUDED.col2;
--중복이 있을 경우 UPDATE
3. MongoDB UPSERT
MongoDB의 update는 인자값은 총 4개
- 조건
- 변경조건
- upsert (기본값 false)
- 멀티라인 조건여부(기본값 false)
위의 3번 인자를 이용한 UPSERT가 가능합니다.
use test
db.test.drop();
db.test.insert({"idx": 1})
db.test.find();--//입력 결과 확인
--{ "_id" : ObjectId("50811cd4150da7bcd1e92041"), "idx" : 1 }
--//업데이트를 치면(upsert를 true를 줬으나 데이터가 있기 때문에 update)
db.test.update({"idx":1}, {$set : {"name":"eastluck"}}, true);
db.test.find();
--//수정 결과화면{ "_id" : ObjectId("50811cd4150da7bcd1e92041"), "idx" : 1, "name" : "eastluck" }
참조:
https://kkyunstory.tistory.com/38
https://mine-it-record.tistory.com/342
728x90
'DataBase' 카테고리의 다른 글
[Database] PostgreSQL 데이터 타입 정리 (0) | 2022.09.01 |
---|---|
[Database] Oracle 시스템 카탈로그 추출하기, 테이블 , 컬럼, 코맨트 정보 확인하기 (0) | 2022.08.23 |
[DataBase] (Oracle vs MySQL) CTAS(Create Table As Select), INSERT INTO SELECT, TEMP Table, View + with절,Inline view (0) | 2022.06.15 |
[DataBase] MySQL Index 1 (B-tree index) (0) | 2021.01.18 |
[DataBase] MySQL 아키텍처(구조) (0) | 2021.01.18 |
댓글