MySQL에는 정기적인 예약 작업 수행을 할수있는 이벤트 스케줄러에 대해 알아보겠습니다.
이벤트 스케줄러는 말그대로 특정 이벤트를 자동으로 정기적으로 수행시킬수 있습니다.
예를 들어, 경과된 시간에 따라 DB 상태를 업데이트 해줘야할 경우 이용할 수 있습니다.
이벤트 스케줄러 생성하기
CREATE EVENT IF NOT EXISTS [이벤트 이름]
ON SCHEDULE
[수행, 반복 할 시간]
ON COMPLETION NOT PRESERVE
ENABLE
COMMENT [코멘트]
DO
[수행할 명령]
END
스케줄러는 동일한 이벤트 스케줄러명이 존재 할 수 없어 exist 를 통해 이벤트 스케줄러를 확인하고
없다면 동일한 이름을 가진 이벤트 스케줄러가 없을 경우 만들 수 있습니다.
[이벤트 이름] : 함수명처럼 해당 이벤트 스케줄의 이름을 붙여주면 됩니다.
[수행, 반복 할 시간] : 해당 명령을 수행하거나 반복할 시간 및 기간을 정해주면 됩니다.
[코멘트] : 해당 이벤트의 내용을 입력해주시면 됩니다.
[이벤트 이름] : 해당 이벤트 스케줄의 이름을 정해주어야 합니다.
[수행할 명령] : 해당 이벤트의 시간의 수행할 명령을 입력하면 됩니다.
on COMPLETION NOT PRESERVE ENABLE
해당 설정은 이벤트를 수행후 삭제 여부를 설정합니다.
만약, 이벤트를 수행후 이벤트를 삭제하지 않는다면 'NOT'을 제거 해주시면 됩니다.
(ON COMPLETION PRESERVE ENABLE)
CREATE EVENT statusChange
on schedule
every 10 second
do
update Story
set storyStatus =
case
when TIMESTAMPDIFF(HOUR , storyCreateTime, current_time()) > 24
then 1
when TIMESTAMPDIFF(HOUR , storyCreateTime, current_time()) <= 24
then 0
end
where storyStatus = ?;
위 예시 코드는 인스타그램 클론 코딩을 할 때 스토리 생성 부분에서 사용한 코드입니다.
이벤트 스케줄러는 10초마다 수행되고 반복되게 구성하였습니다.
인스타그램 스토리는 구조상 24시간이 지나면 스토리가 보이지 않기 때문에 스토리 생성 시간과 현재 시간을 비교하여 24시간 이상 차이가 나면 storyStatus 상태값이 변경되게 구성하게 만들었습니다.
'Back-end > DB' 카테고리의 다른 글
[MySQL] 데이터 정렬하기 - ORDER BY (0) | 2021.05.24 |
---|---|
[MySQL] LIMIT, OFFSET - 페이징시 쿼리 (0) | 2021.05.21 |
[MySQL] DISTINCT - 행의 중복 출력 방지하기 (0) | 2021.05.21 |
[MySQL] 금일 특정 시간대 만들어진 데이터의 조회하기 (0) | 2021.03.16 |
[MySQL] ON UPDATE CURRENT_TIMESTAMP 생성 방법 (0) | 2021.03.04 |
댓글