ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] Upsert 쿼리란 무엇일까?
    Book/Real MySQL 2021. 7. 22. 16:21
    728x90
    반응형

    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 스키마는 아래와 같습니다.

     

    스크린샷 2021-07-22 오후 4 10 24

    현재 user_idUnique Key로 설정하였습니다.(참고로 만약 컬럼에 Unique Key를 설정하지 않았다면 값은 계속 중복해서 INSERT가 됩니다. 그래서 어떤 값을 기준으로 중복 체크를 해서 Update or INSERT를 할 지 선택해서 그 값에 Unique Key를 걸어주어야 합니다.)

     

    그리고 정말 Upsert 쿼리가 잘 실행되는지 확인해보기 위해서 테이블에 INSERT 쿼리를 두 번 날려보겠습니다.

     

    스크린샷 2021-07-22 오후 4 15 19

    현재 위와 같이 데이터가 존재하는 상황에서 한번 더 위의 Upsert 쿼리를 실행해보면 refresh_token의 값만 업데이트 되는 것을 확인할 수 있습니다.

    반응형

    댓글

Designed by Tistory.