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의 모든 정보를 확인할 수 있다.