먼저 이벤트 스케쥴러가 돌아갈 수 있는 환경인지 확인
show variables like 'event%';
밸류가 ON으로 되어있으면 바로 진행이 가능하고
OFF로 되어있다면 설정해야한다.
SET GLOBAL event_scheduler = ON;
root로 해주면 된다.
하고 바로 작업을 진행한다
//기본 문법
CREATE EVENT IF NOT EXISTS 이벤트 이름
ON SCHEDULE 스케줄
ON COMPLETION PRESERVE
DO
실행시킬 내용
나같은 경우는
create event if not exists monthCancelUpdate
On schedule every 1 minute
STARTS '2024-03-27 15:23:00'
on completion PRESERVE
comment 'subs_type이 2인 데이터 중 현재날짜와 end_date컬럼을 비교하여 갱신'
DO
update
mb_subscription ms1
join (
select idx, subs_type
from mb_subscription
where subs_type = '2'
) as ms2 on ms1.idx = ms2.idx
join (
select idx, end_date
from mb_subs_term
where end_date < now()
) as ms3 on ms1.idx = ms3.idx
set
ms1.subs_type = '99' ;
분단위 테스트를 위해 등록했다.
정상적으로 된다.
등록한 스케쥴러는 이렇게 확인할 수 있다.
SELECT * FROM information_schema.events;
이벤트 스케쥴러 수정은 이렇다
ALTER EVENT DB.스케줄명 ON SCHEDULE 시간;
나는 이렇게 바꿨다
ALTER EVENT monthCancelUpdate ON SCHEDULE EVERY 1 DAY STARTS (TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR);
현재시간 + 1일 + 1시간 인데 현재시간이 오후 네시라서 다시 정적인 데이터로 찍어줬다.
ALTER EVENT monthCancelUpdate ON SCHEDULE EVERY 1 DAY STARTS '2024-03-28 00:00:00';