티스토리 뷰

1. CREATE EVENT 문법

  •  이벤트를 새로 생성할 때 사용한다.
CREATE EVENT event_name
ON SCHEDULE schedule
DO event_body;
  • event_name: 이벤트의 이름
  • schedule: 언제, 얼마나 자주 실행할지 정의
  • event_body: 이벤트 실행 시 수행할 SQL문

 

2. 스케줄링 옵션 (SCHEDULE)

 MySQL에서 제공하는 다양한 스케줄링 방법으로 다음과 같다.

 

2-1. AT

CREATE EVENT my_event_at
ON SCHEDULE AT '2024-08-20 10:00:00'
DO
  UPDATE my_table SET status = 'expired' WHERE expiry_date < NOW();
  • 지정된 시각에 이벤트를 1회만 실행

 

2-2. EVERY

CREATE EVENT my_event_every
ON SCHEDULE EVERY 1 DAY
DO
  DELETE FROM my_table WHERE created_at < NOW() - INTERVAL 30 DAY;
  • 주기적으로 반복되도록 설정
  • 위 코드에서는 매일 실행되며, 30일 이상 지난 데이터를 삭제한다.

 

2-3. STARTS

CREATE EVENT my_event_starts
ON SCHEDULE EVERY 1 HOUR
STARTS '2024-08-12 00:00:00'
DO
  INSERT INTO log_table (event_time, message) VALUES (NOW(), 'Hourly task executed');
  • 이벤트 시작 시점을 지정
  • 위 코드에서는 2024년 8월 12일 00시부터 시작

 

2-4. ENDS

CREATE EVENT my_event_ends
ON SCHEDULE EVERY 1 DAY
STARTS '2024-08-12 00:00:00'
ENDS '2024-12-31 23:59:59'
DO
  UPDATE my_table SET status = 'archived' WHERE created_at < NOW() - INTERVAL 1 YEAR;
  • 이벤트 종료 시점 지정
  • 위 코드에서는 2024년 8월 12일부터 매일 실행되며 12월 31일에 종료

 

2-5. STARTS + ENDS + EVERY 조합 예시

CREATE EVENT my_event_combined
ON SCHEDULE EVERY 1 WEEK
STARTS '2024-08-12 00:00:00'
ENDS '2024-12-31 23:59:59'
DO
  CALL weekly_maintenance();
  • 2024년 8월 12일부터 매주 실행, 12월 31일 종료

 

3. ON COMPLETION PRESERVE | NOT PRESERVE

  • ON COMPLETION NOT PRESERVE: 이벤트가 한 번 실행된 후 자동 삭제
  • ON COMPLETION PRESERVE: 실행 후에도 이벤트를 보존
CREATE EVENT my_event_not_preserve
ON SCHEDULE AT '2024-08-20 10:00:00'
ON COMPLETION NOT PRESERVE
DO
  INSERT INTO log_table (event_time, message) VALUES (NOW(), 'One-time task executed');
  • 위 코드에서는 한 번 실행되고 자동으로 삭제

 

4. ENABLE | DISABLE

  • 이벤트를 생성 시 활성화 여부 설정
CREATE EVENT my_event_disabled
ON SCHEDULE EVERY 1 HOUR
DISABLE
DO
  DELETE FROM temp_table WHERE created_at < NOW() - INTERVAL 1 HOUR;
  • 위 코드에서는 생성은 되지만 비활성화 상태로 시작됨

 

5. ALTER EVENT

  • 기존 이벤트를 수정할 수 있음
ALTER EVENT my_event_every
ON SCHEDULE EVERY 2 DAY
DO
  DELETE FROM my_table WHERE created_at < NOW() - INTERVAL 60 DAY;
  • 위 코드에서는 기존 이벤트를 2일 주기로 변경

 

6. DROP EVENT

DROP EVENT my_event_at;
  • 이벤트 삭제

 

7. SHOW EVENTS

SHOW EVENTS FROM my_database;
  • 이벤트 목록 조회

 

8. 이벤트 권한 (EVENT 권한)

GRANT EVENT ON my_database.* TO 'username'@'host';
  • 이벤트를 생성/수정/삭제하려면 EVENT 권한이 필요

 

9. ON ERROR

  • 이벤트 실행 중 오류가 발생했을 때의 동작을 지정
  • ON ERROR STOP: 오류 발생 시 즉시 중지, 이후 실행 안 함
  • ON ERROR CONTINUE: 오류 발생해도 계속 실행함 (기본값)

 

9-1. ERROR 문법

CREATE EVENT event_name
ON SCHEDULE schedule
ON ERROR {STOP | CONTINUE}
DO
  event_body;

 

9-2. ON ERROR STOP 예시

CREATE EVENT my_event_error_stop
ON SCHEDULE EVERY 1 DAY
ON ERROR STOP
DO
  UPDATE orders SET status = 'processed' WHERE status = 'pending';
  • 오류 발생 시, 이벤트 더 이상 실행되지 않음
  • 수동으로 수정 및 재시작 필요

 

9-3. ON ERROR CONTINUE 예시

CREATE EVENT my_event_error_continue
ON SCHEDULE EVERY 1 DAY
ON ERROR CONTINUE
DO
  DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;
  • 오류 발생해도 다음 스케줄에 계속 실행함
  • 유지보수, 로그 정리 등에 적합

 

9-4. 기존 이벤트에 ON ERROR 추가

ALTER EVENT my_event_error_continue
ON ERROR CONTINUE;
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함