본문 바로가기

SQL/MySQL

[MySQL] Data가 있으면 Update 없으면 Insert

특정 테이블에서 데이터가 있으면 update하고 그렇지 않을경우 insert 해야할 경우가 있다.

아무것도 모르던 시절에는 java쪽에서 select count(column) from tbl 한후 결과값이 0이면 insert 1이상이면 해당데이터를 update 시켰던 기억이 있다. 이럴경우에는 SELECT, UPDATE, INSERT 세가지 모두 구현해야한다. 매우 불필요한 행위..왜 그랬는지는 기억하고 싶지않다 그냥 아는게 그것뿐이라서 그랬던거 같다..

 

그래서 오늘은 MySQL에서 ON DUPLICATE KEY UPDATE 라는 기능을 사용하려고 한다.

 

먼저 아래쿼리를 살펴보자

INSERT INTO token_table(
    TKN_SQ
    , TKN_ID
    , TKN_DATE
    , TKN_USEYN
) VALUES (
    1
    , "TOKEN"
    , SYSDATE()
    , "Y"
) ON DUPLICATE KEY UPDATE
     TKN_DATE = SYSDATE()
    , TKN_USEYN = "Y"

위쪽의 INSERT문은 우리가 알던 평범한 INSERT문이다 붉은색으로 표시한 부분은

먼저 TKN_SQ는 token_table의 PK가 될것이고 TKN_ID는 실제 토큰값이 들어가는 컬럼이면서

유니크 제약조건을 가지고있다. 그리고 아래의 ON DUPLICATE KEY UPDATE 부분은 유니크 제약조건을 가지고있는 필드를 찾아서 중복이 있다면 아래 내용대로 UPDATE를 진행하겠다는 내용이다.

결과값은

UPDATE를 실행하면 2

INSERT를 실행하면 1을 반환한다

 

 

앞으로는 위와같은 제약이 있고, DATA 유무에 따라서 쿼리를 실행해야 할때 유용하게 써먹도록 하자