정해진 시간에 특정 작업을 자동으로 실행하도록 설정할 수 있는 기능
쉽게 말해 "알람" 역할!
서버나 OS 스케줄러를 따로 설정하지 않아도 MySQL 자체에서 주기적으로 또는 특정 시점에 실행되는 작업 설정 가능
MySQL Event Scheduler는 기본적으로 꺼져 있음
SHOW VARIABLES LIKE 'event_scheduler';
ㄴ 결과가 OFF 이면 비활성화
SET GLOBAL event_scheduler = ON;
SHOW EVENTS;
SELECT * FROM information_schema.EVENTS;
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;
1분마다 실행되는 이벤트
CREATE EVENT sample_event
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO sample_table (data) VALUES ('Hello, World!');
특정 시간에 한 번 실행되는 이벤트
CREATE EVENT delete_old_data
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
DO
DELETE FROM sample_table WHERE created_at < NOW() - INTERVAL 1 DAY;
CREATE TABLE sample_table (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
현재 상태 확인
SHOW VARIABLES LIKE 'event_scheduler';
활성화 - 상태가 off라면 실시
SET GLOBAL event_scheduler = ON;

ㄴ 저는 현재 사태가 ON으로 출력되어서 따로 활성화 하지 않았습니다.
1분마다 데이터 삽입하기
CREATE EVENT insert_sample_data
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO sample_table (data) VALUES ('Hello, Event Scheduler!');

~ 1분뒤~

ㄴ 자동으로 INSERT된 것 확인 가능!
CREATE EVENT delete_all_data
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
DO
DELETE FROM sample_table;
실행 시점: CURRENT_TIMESTAMP + INTERVAL 5 MINUTE (현재 시각으로부터 5분 후)
실행할 작업: DELETE FROM sample_table (모든 데이터 삭제)
** 8:40분에 delete 스케쥴러 실행

~5분 뒤~

CREATE EVENT repeat_for_period
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO
INSERT INTO sample_table (data) VALUES ('Repeating Event');
실행 주기: EVERY 1 MINUTE
실행 기간: STARTS 현재 시각부터 ENDS 현재시각으로부터 10분 뒤까지 실행
실행 작업: INSERT INTO sample_table

SHOW EVENTS;

ㄴ 4,5번 실습은 단발성이거나 특정 기간 동안만 반복하기 때문에 그 후에는 자동 삭제되어 잡히지 않음
DROP EVENT IF EXISTS delete_all_data;
DROP EVENT IF EXISTS repeat_for_period;
-- 테이블 생성
CREATE TABLE IF NOT EXISTS event_scheduler_test (
id INT AUTO_INCREMENT PRIMARY KEY,
data VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 현재 상태 확인
SHOW VARIABLES LIKE 'event_scheduler';
-- 1번과제
CREATE EVENT insert_sample_data
ON SCHEDULE EVERY 1 MINUTE
DO
INSERT INTO event_scheduler_test (data) VALUES ('Hello, Event Scheduler!');
-- 2번과제
CREATE EVENT delete_all_data
ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 5 MINUTE
DO
DELETE FROM event_scheduler_test;
-- 3번 과제
CREATE EVENT repeat_for_period
ON SCHEDULE EVERY 1 MINUTE
STARTS CURRENT_TIMESTAMP
ENDS CURRENT_TIMESTAMP + INTERVAL 10 MINUTE
DO
INSERT INTO event_scheduler_test (data) VALUES ('Repeating Event');
-- 확인
show events;
SELECT * FROM event_scheduler_test;
SELECT * FROM information_schema.EVENTS;