회사 업무를 할 때 mybatis 를 이용해 쿼리를 다뤘었다
그 때 테이블을 주기적으로 update + insert 할 일이 있었다!
맨 처음에는 table을 전체 drop 하고 다시 데이터를 insert 하는 방법을 생각했으나 드롭한 사이에 호출을 할 수도 있는 상황인지라 다른 방법을 찾아야했다
🤦♀️
그러던 중 ON DUPLICATE KEY UPDATE를 이용해 UPSERT를 진행할 수 있다는 것을 알게 되었다!
그리고 update 할 컬럼을 지정할 수 있다는 점에서 효율적이었다!
<insert id = "updatedata">
INSERT INTO 테이블이름(컬럼1, 컬럼2, 컬럼3, REGDATE) VALUES
<foreach item = "item" separator = "," collection = "list">
(#{item.column1}, #{item.column2}, #{item.column3}, NOW())
</foreach>
ON DUPLICATE KEY UPDATE 컬럼2 = values(컬럼2) , 컬럼3 = values(컬럼3), REGDATE = values(REGDATE)
</insert>
비록 UPSERT 자체가 효율은 조큼 떨어진다만(9000건에 2초 정도 걸렸던 것 같다) 그래도 꼭 쓰여야 할 상황이 필요하니 적어놔야지
히히