[MySQL/MariaDB] 동일한 데이터가 없을 경우는 INSERT, 있을 경우에는 UPDATE (ON DUPLICATE KEY – 오라클의 MERGE INTO 같은)

By | 8월 16, 2021

Oracle의 MERGE INTO 문의 경우 동일 데이터에 대한 판단 기준을 개발자가 쿼리에 명시하는 데 반해,
MySQL 계열에서는 조건을 따로 받지 않고 Unique Index를 사용하는 것 같다. (추측임)

INSERT INTO tb_sample (
      col1
    , col2
    , col3  
) VALUES (
      'AAA'
    , 'BBB'
    , 'CCC'
)
ON DUPLICATE KEY UPDATE
    col2 = 'XXX',
    col3 = 'YYY'


추가 예제 - MyBatis foreach를 사용한 대량(batch) insert의 경우

INSERT INTO tb_sample (
      col1
    , col2
    , col3  
) VALUES 
<foreach collection="paramList" item="map" separator=",">
(
      #{map.aaa}
    , #{map.bbb}
    , #{map.ccc}
)
</foreach>
ON DUPLICATE KEY UPDATE
    col2 = VALUE(col2),
    col3 = VALUE(col3)
mariadb 10.3.2 까지는 VALUES(칼럼명), 10.3.3 부터는 VALUE(칼럼명) 으로 사용한다.
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments