MySQL

MySQL event란

필유아사 2024. 12. 5. 12:59

 

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를 유지한다.