인프라/데이터베이스

mysql 이벤트 스케쥴러 사용 방법

2022. 12. 29. 11:15
글 목차


728x90
#정보를 입력할 테이블
CREATE TABLE event_test
(
	datetime datetime
) ENGINE = INNODB;

#현재 시각을 입력하는 프로시저 (1)
DELIMITER $$
CREATE PROCEDURE time_now()
BEGIN
    INSERT INTO event_test(datetime) 
	SELECT now();
END $$
DELIMITER ;

#현재 시각을 입력하는 이벤트 스케쥴러 (1)
CREATE EVENT event1
ON SCHEDULE EVERY 1 minute
DO CALL time_now();

#모든 데이터를 삭제하는 프로시저 (2)
DELIMITER $$
CREATE PROCEDURE time_del()
BEGIN
    DELETE from event_test;
END $$
DELIMITER ;

#특정시간에 모든 데이터를 삭제하는 이벤트 스케쥴러 (2)
CREATE EVENT event2
ON SCHEDULE AT date_add(now(), INTERVAL 5 minute)
DO CALL time_del();

#특정 기간동안 현재시간을 입력하는 이벤트 스케쥴러 (3)
CREATE EVENT event3
ON SCHEDULE EVERY 10 second
starts date_add(now(), INTERVAL 1 second)
ends date_add(now(), INTERVAL 4 minute)
DO CALL time_now();

 

일단 테이블을 하나 생성한다.

 

그후 프로시저를 만든다.

 

delimiter 는 각 문장의 끝 표시를 다른 문자열로 바꾼다는 것이다

그래서 delimiter $$ 라고 쓰면 기존에 끝 표시였던 ; 이 $$가 되어 sql의 실행 단위가 $$가 나올 때 까지가 된다.

그래서 여러개 문장이 한번에 수행되어야 할 때 $$로 바꾸어 ;로 끝나는 문장이 오더라도 sql이 끊기지 않다가 $$가 오면 sql 문장이 실행되고 볼일이 끝났으니 원래 delimiter였던 ; 로 돌아가기 위해 delimiter ; 를 입력해 준다.

 

그후 프로시저를 호출하는 이벤트 스케쥴러를 만든다.

 

on schedule 다음에 여러 표현식이 올 수가 있다.

every는 반복한다는 의미고

at은 특정시간에 한다는 의미고

starts 는 특정 시간에 시작한다는 의미고

ends 는 특정시간에 이벤트 스케쥴러가 종료되서 없어진다는 의미다.

728x90
mysql 이벤트 스케쥴러 사용 방법