MySQL event란
MySQL event란
MySQL 이벤트는 일정에 따라 실행되는 작업입니다. 예약된 이벤트라고 합니다. 이벤트를 만들면 주기적인 간격으로 실행할 SQL 문이 포함된 데이터베이스 객체를 만들고, 특정 시간에 시작합니다. Unix crontab (일명 " cron job " ) 또는 Windows 작업 스케줄러와 유사합니다.
Event 관리 - 생성/수정/삭제
1) Event Scheduler 활성화
이벤트를 실행하려면 Event Scheduler가 활성화되어 있어야 합니다. Event Scheduler가 활성화되어 있지 않다면 아래 명령어로 활성화시킵니다.
SET GLOBAL event_scheduler = ON;
2) Event 생성 권한
이벤트가 생성될 스키마에 대한 권한이 필요합니다. Event 생성 권한이 없다면 아래와 같이 EVENT 권한을 부여합니다. 이벤트는 schema 레벨의 권한이므로 테이블 레벨로 권한을 부여할 수 없습니다.
GRANT EVENT ON schemaname.* TO username@'%";
3) Event 생성
아래는 Event 생성 예시입니다.
CREATE EVENT myevent
ON SCHEDULE AT TIMESTAMP(CURRENT_DATE) + INTERVAL 1 HOUR
DO
UPDATE myschema.mytable SET mycol = mycol + 1;
myevent라는 이름의 이벤트를 생성합니다 .
이 이벤트는 1시간에 한 번씩 mytable 테이블의 mycol 컬럼값을 1씩 증가시키는 SQL 명령문을 실행합니다.
4) 이벤트 수정
이벤트를 수정하려면 'ALTER EVENT' 명령을 사용합니다.
이벤트의 여러 특성을 변경할 수 있습니다.
이 예제에서는 에서 실행되는 SQL 명령문을 myevent에서 모든 레코드를 삭제하고 하루에 한 번(01 시) 실행되도록 변경합니다.
ALTER EVENT myevent
ON SCHEDULE
AT TIMESTAMP(CURRENT_DATE) + INTERVAL 1 DAY + INTERVAL 1 HOUR
DO
TRUNCATE TABLE myschema.mytable;
5) 이벤트 비활성화
DISABLE 명령어로 Event를 비활성화합니다.
ALTER EVENT myevent DISABLE;
6) 이벤트 Drop
DISABLE 명령어로 Event를 비활성화합니다.
DROP EVENT myevent ;
7) Event 조회
데이터베이스의 모든 이벤트를 확인합니다.
SELECT * FROM information_schema.EVENTS;
CREATE EVENT 옵션
CREATE
[DEFINER = user]
EVENT
[IF NOT EXISTS]
event_name
ON SCHEDULE schedule
[ON COMPLETION [NOT] PRESERVE]
[ENABLE | DISABLE | DISABLE ON {REPLICA | 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}
*** Event 생성 옵션 중 설명
- STARTS 와 ENDS 가 정의된 상태에서 ON COMPLETION NOT PRESERVE 옵션은 Event를 Drop 하고
ON COMPLETION PRESERVE 옵션은 Event를 유지한다.