-
[MySQL] Upsert 쿼리란 무엇일까?Book/Real MySQL 2021. 7. 22. 16:21728x90반응형
MySQL Upsert 사용법
이번 글에서는
MySQL
에서Upsert
쿼리를 사용하는 법에 대해서 정리해보겠습니다. Upsert는 이름에서 어느정도 유추할 수 있듯이Update
+Insert
를 합친 말입니다.즉,
Upsert는 중복되는 값이 있다면 Update를 하고 중복되는 값이 없다면 Insert
를 하는 쿼리입니다. 좀 더 정확히 말하면Unique Key
의 값이 중복된다면Update
를 하고,Unique 컬럼의 값이 존재하지 않는다면 INSERT
를 하는 것입니다. 실제로 프로젝트를 하다 보니 이러한 쿼리를 사용해야 할 상황이 와서 이렇게 정리를 하게 되었습니다. Upsert 쿼리를 보면 아래와 같습니다.INSERT INTO user_refresh_token (user_id, refresh_token) VALUES (#{userId}, #{refreshToken}) ON DUPLICATE KEY UPDATE refresh_token = #{refreshToken}
쿼리의 생김새도
INSERT
쿼리와UPDATE
쿼리를 섞어놓은 것 같습니다. Upsert 쿼리는user_refresh_token
테이블에다 적용을 할 것인데user_refresh_token
스키마는 아래와 같습니다.현재
user_id
를Unique Key
로 설정하였습니다.(참고로 만약 컬럼에Unique Key
를 설정하지 않았다면 값은 계속 중복해서 INSERT가 됩니다. 그래서 어떤 값을 기준으로 중복 체크를 해서 Update or INSERT를 할 지 선택해서 그 값에Unique Key
를 걸어주어야 합니다.)그리고 정말 Upsert 쿼리가 잘 실행되는지 확인해보기 위해서 테이블에
INSERT
쿼리를 두 번 날려보겠습니다.현재 위와 같이 데이터가 존재하는 상황에서 한번 더 위의
Upsert
쿼리를 실행해보면refresh_token
의 값만 업데이트 되는 것을 확인할 수 있습니다.반응형'Book > Real MySQL' 카테고리의 다른 글
[MySQL] InnoDB 언두(Undo) 로그와 MVCC란 무엇일까? (0) 2021.07.29 [MySQL] Distinct 사용할 때 알아두어야 할 것 (0) 2021.07.10 [MySQL] Inner JOIN과 Outer JOIN의 차이가 무엇일까? (0) 2021.06.25 [MySQL] 트랜잭션 고립 레벨이란 무엇일까? (0) 2021.05.25