본문 바로가기

카테고리 없음

[MySQL] Event Scheduler

CREATE EVENT 문

CREATE
    [DEFINER = user]
    EVENT
    [IF NOT EXISTS]
    event_name
    ON SCHEDULE schedule
    [ON COMPLETION [NOT] PRESERVE]
    [ENABLE | DISABLE | DISABLE ON SLAVE]
    [COMMENT 'string']
    DO event_body;

schedule: {
    AT timestamp [+ INTERVAL interval] ...
  | EVERY interval
    [STARTS timestamp [+ INTERVAL interval] ...]
    [ENDS timestamp [+ INTERVAL interval] ...]
}

interval:
    quantity {YEAR | QUARTER | MONTH | DAY | HOUR | MINUTE |
              WEEK | SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
              DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}

MySQL 공식 문서 사용 방법

  • [ ]안에 있는 내용은 생략이 가능하다
  • DEFINER 는 ‘create event’ 구문을 수행한 mysql 계정을 뜻한다
  • 크게 세 부분 CREATE EVENT , ON SCHEDULE, DO
    • CREATE EVENT 이벤트 이름
    • ON SCHDULE 이벤트가 실행되는 시기와 빈도를 결정
    • DO 시기마다 실행될 sql 구문

실습을 위한 테스트 테이블

CREATE TABLE `test`
(
    `id` int auto_increment primary key,
  `name` varchar(30),
  `age` int,
  `regdate` datetime default current_timestamp
);

데이터가 1분에 한 번씩 등록되는 Event Scheduler

CREATE EVENT IF NOT EXISTS e1
ON SCHEDULE
    every 1 minute
    starts current_timestamp
    ends current_timestamp + interval 5 minute
DO insert into test (name, age) values ('홍길동', 13);
  • every 는 일정한 시간동안 해당 이벤트를 반복

현재 시간으로부터 5분 후 모든 데이터가 삭제되는 Event Scheduler

CREATE EVENT IF NOT EXISTS e2
ON SCHEDULE
    at current_timestamp + interval 5 minute
    on completion preserve
DO delete from test;
  • at 은 정해진 시간 일회적으로 수행
  • 이벤트가 끝난 후 해당 이벤트는 자동 삭제 되는데 on completion preserve를 사용해서 남겨 둘 수 있다

일정 시간 동안만 반복되는 Event Scheduler

CREATE EVENT IF NOT EXISTS e3
ON SCHEDULE
    every 1 minute
    starts current_timestamp
    ends current_timestamp + interval 5 minute
DO insert into test (name, age) values ('홍길동', 13);
  • starts, ends 로 시작과 끝 시간을 지정해서 event의 수행 범위를 정할 수 있다

 

저장된 Event Scheduler의 정보 확인

SELECT * FROM information_schema.EVENTS;

이렇게 엄청나게 긴 Result Grid 가 뜨는데 이름, time zone, definer, 시작, 끝 시간 등 event의 모든 정보를 확인할 수 있다.