구름과 바람 그리고 나그네 :: [MYSQL] MYSQL UPSERT / ON DUPLICATE KEY UPDATE

누구나 다 알고 있는 MYSQL의 UPSERT를 소개합니다.

 

1. 먼저 테이블 생성

CREATE TABLE UPSERT_TABLE

(

ID INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,

UNI_KEY1 VARCHAR(10) NOT NULL,

UNI_KEY2 VARCHAR(10) NOT NULL,

VAL1 VARCHAR(100) NOT NULL,

VAL2 VARCHAR(100) NOT NULL,

UNIQUE(UNI_KEY1, UNI_KEY2)

) ENGINE=INNODB DEFAULT CHARSET=UTF8;

 

2. 디비 인서트

INSERT INTO UPSERT_TABLE

(UNI_KEY1, UNI_KEY2, VAL1, VAL2)

VALUES

('A', '11', 'VALUE A', 'RESULT 1'),

('B', '22', 'VALUE B', 'RESULT 2'),

('C', '33', 'VALUE C', 'RESULT 3'),

('D', '44', 'VALUE D', 'RESULT 4'),

('E', '55', 'VALUE E', 'RESULT 5');

 

3. UPSERT구문

UPSERT구문

INSERT INTO UPSERT_TABLE

(UNI_KEY1, UNI_KEY2, VAL1, VAL2)

VALUES

('A', '11', 'UPDATED VALUE A_A', 'RESULT 1-1'),

('B', '22', 'UPDATED VALUE B_B', 'RESULT 2-2'),

('F', '66', 'NEW VALUE F', 'RESULT 6-6')

ON DUPLICATE KEY UPDATE

VAL1 = 'VALUE_UPDATE',

VAL2 = 'RESULT_UPDATE';

 

4. 결과

UNI_KEY1 필드 값 A, B는 업데이트

C, D, E는 그냥 유지

F는 새로 추가

 

자주 쓸것 같아서 메모해봅니다.

 

'개발 > DB' 카테고리의 다른 글

[MySQL] phpMyAdmin에서 대소문자 입력  (0) 2018.11.08
[My SQL] SELECT INSERT  (0) 2018.11.07
[mysql]자동증가 필드 기본값 설정하기  (0) 2018.08.08
[MS-SQL]날짜 타입별 보기  (0) 2018.07.25
[DB]ORACLE의 DECODE와 MS-SQL의 CASE  (0) 2018.07.17
Posted by pressrain
,