상세 컨텐츠

본문 제목

MySQL 이벤트 스케쥴러 생성

MySQL

by Jude_Juu 2025. 5. 9. 12:11

본문

1 hour 단위로 쿼리 수행

DELIMITER //

CREATE EVENT IF NOT EXISTS {생성할 스케쥴러명}
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP
DO
    SELECT s.*
    FROM {쿼리가 실행 될 테이블} s
    WHERE s.category = '{조건대상}'
        AND s.menu IN (
            SELECT menu
            FROM {쿼리가 실행 될 테이블}
            WHERE category_id = '{조건대상}'
            GROUP BY menu
            HAVING SUM(-나간돈) + SUM(들어온돈) <> SUM(오버된금액)
                OR (
                    SUM(COALESCE(오버레이된 금액, 0) > 0
                    AND NOT (
                        ABS(ABS(SUM(오버된금액)) / MAX(나눌 인원 수) - MAX( COALESCE(오버레이된 금액, 0))) <= 1
                       )
                )
        )
//

DELIMITER ;
  1. 이벤트 스케쥴러에서 CREATE EVENT IF NOT EXISTS {생성할 스케쥴러명}
    1. {생성할 스케쥴러명} 이라는 이름의 이벤트가
      ㄴ 실제 사용 할 스케쥴러명으로 변경 필요
    2. 이미 있다면: CREATE EVENT 명령어 무시하고 이벤트 그대로 유지
  2. 매 시간마다 ON SCHEDULE EVERY 1 HOUR
  3. {쿼리가 실행 될 테이블} 테이블에서 해당 쿼리를 실행
    ㄴ 실제 쿼리 실행 될 테이블명으로 변경 
  4. DELIMITER 구분자 재정의
    1. SQL 쿼리문 구분하는 데 사용 (이벤트 스케줄러 생성 및 설정, 테이블에서 쿼리 실행)

관련글 더보기