티스토리 뷰

mysql

replace에 대해

진태우 2015. 7. 23. 11:21

mysql의 replace 함수는 insert와 update를 동시에 한 것과 같은 기능이다.

테이블에 해당 raw가 없으면 insert를 해당 데이가 있다면 그 raw를 해당하는 데이터로 update 해준다.

데이터를 그룹적용할 때, 사용하면 효율적으로 사용할 수 있을 것 같다.


REPLACE INTO

mgr_alarm

(

manager_id,

hashkey_id,

event_id,

alarmtype_id

)

(

SELECT

#manager_id# AS manager_id,

#hashkey_id# AS hashkey_id,

ma.event_id,

ma.alarmtype_id

FROM mgr_alarm ma

INNER JOIN obj_event_set oes ON oes.hashkey_id = ma.hashkey_id AND oes.event_id = ma.event_id

INNER JOIN obj_rsc_key orks ON orks.hashkey_id = oes.hashkey_id AND orks.obj_id = #index# AND orks.managetype_id = #managetype_id# AND orks.rsctype_id = #rsctype_id# AND orks.rsc_id = #rsc_id# AND orks.rsc_key = #rsc_key#

INNER JOIN obj_event_set oest ON oest.hashkey_id = #hashkey_id# AND oest.event_id = ma.event_id

WHERE ma.manager_id = #condition_id#

)


그룹적용을 구현할 때 사용한 쿼리이다. 여기서 앞부분 괄호 안에는 replace할 column값들이 들어오고, 뒷부분 괄호에는 set해줄 값들을 넣어주는 부분이다.

그룹적용 할 값을 select해서 적용할 대상의 P.K(hashkey_id)로 바꿔치기 한 후 replace함수를 실행한 것이다.

이때 주의할 점은 set부분에서 join을 사용하여 select를 할 때, 외래키가 join table에 있을 경우엔 반드시 replace할 테이블의 raw가 join table에 미리 insert 되있어야 한다.


댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함