MySQL에서 이미 생성된 이벤트를 수정해야 할 때는 ALTER EVENT 문을 사용합니다. 이 문장을 통해 이벤트의 실행 주기, 수행 내용, 이름, 활성화 여부 등 다양한 속성을 자유롭게 변경할 수 있습니다.
ALTER EVENT 기본 문법
ALTER EVENT event_name
ON SCHEDULE schedule
ON COMPLETION [NOT] PRESERVE
RENAME TO new_event_name
ENABLE | DISABLE
DO event_body각 절은 선택적으로 사용할 수 있으며, 변경하고자 하는 속성에 해당하는 절만 지정하면 됩니다. 예를 들어 실행 주기만 바꾸고 싶다면 ON SCHEDULE 절만, 이벤트가 수행하는 작업만 바꾸고 싶다면 DO 절만 작성하면 됩니다.
예제로 살펴보는 ALTER EVENT
1. 테스트용 이벤트 생성
먼저 1분마다 event_messages 테이블에 메시지를 삽입하는 이벤트를 만들어 보겠습니다.
mysql> CREATE EVENT hello
ON SCHEDULE EVERY 1 MINUTE
DO INSERT INTO event_messages(message, generated_at)
VALUES ('Alter event testing', NOW());
Query OK, 0 rows affected (0.00 sec)이벤트가 정상적으로 동작하면 테이블에는 다음과 같이 데이터가 쌓입니다.
mysql> SELECT * FROM event_messages; +----+---------------------+---------------------+ | ID | MESSAGE | Generated_at | +----+---------------------+---------------------+ | 1 | Without Preserve | 2017-11-22 20:32:13 | | 2 | With Preserve | 2017-11-22 20:35:12 | | 3 | Alter event testing | 2017-11-22 21:08:37 | +----+---------------------+---------------------+ 3 rows in set (0.00 sec)
2. 실행 주기 변경하기
이제 ALTER EVENT를 사용해 이벤트의 실행 주기를 1분에서 2분으로 변경해 보겠습니다.
mysql> ALTER EVENT hello ON SCHEDULE EVERY 2 MINUTE; Query OK, 0 rows affected (0.00 sec)
위 쿼리는 이벤트의 스케줄만 변경하며, 이벤트가 수행하는 작업 그 자체는 그대로 유지됩니다.
3. 이벤트 본문(DO 절) 변경하기
실행 주기뿐 아니라 이벤트가 실제로 수행하는 작업도 변경할 수 있습니다. 아래 쿼리는 삽입되는 메시지를 'ALTERED'로 바꾸는 예입니다.
mysql> ALTER EVENT hello
DO INSERT INTO event_messages(message, generated_at)
VALUES ('ALTERED', NOW());
Query OK, 0 rows affected (0.00 sec)변경 후 잠시 기다렸다가 테이블을 조회하면 결과를 확인할 수 있습니다.
mysql> SELECT * FROM event_messages; +----+---------------------+---------------------+ | ID | MESSAGE | Generated_at | +----+---------------------+---------------------+ | 1 | Without Preserve | 2017-11-22 20:32:13 | | 2 | With Preserve | 2017-11-22 20:35:12 | | 3 | Alter event testing | 2017-11-22 21:08:37 | | 4 | Alter event testing | 2017-11-22 21:09:15 | | 5 | ALTERED | 2017-11-22 21:11:15 | +----+---------------------+---------------------+ 5 rows in set (0.00 sec)
결과 분석
위 결과 집합을 보면 ID가 5인 레코드의 메시지가 'ALTERED'로 변경되었고, 생성 시간 역시 이전 레코드(ID 4)보다 약 2분 뒤인 것을 알 수 있습니다. 이는 ALTER EVENT를 통해 실행 주기와 이벤트 본문이 모두 성공적으로 수정되었음을 의미합니다.
마무리
ALTER EVENT 문을 활용하면 이벤트를 삭제 후 재생성할 필요 없이, 실행 주기(ON SCHEDULE), 수행 작업(DO), 이름(RENAME TO), 활성화 상태(ENABLE | DISABLE) 등을 유연하게 관리할 수 있습니다. 반복 작업을 자동화하는 MySQL 이벤트 스케줄러를 운영할 때 매우 유용하게 활용할 수 있는 기능이니 꼭 익혀두시기 바랍니다.