DB

[MySQL] 프로시저, 이벤트 스케줄러 만들기

연듀 2024. 6. 1. 15:38

 

 

프로시저란?

어떠한 동작을 일괄 처리하기 위한 쿼리문의 집합으로, MySQL에서의 메서드라고 보면 된다. 함수처럼 매개변수를 받고 그에 따라 결과를 나타내는 것이 가능하다.

SQL 명령의 묶음으로, 프로시저로 묶인 SQL 문 질의들은 처리될 때 하나의 쿼리로 해석된다.

 

 

프로시저 사용법

DELIMITER //

CREATE PROCEDURE 프로시저명(매개변수)

BEGIN 

           SQL 문1;

           SQL 문2;

END
//
DELIMITER ;

 

"DELIMITER //" 을 선언해서 기존 구분 문자인 ";" 에서 "//"로 바꿔준다.

CREATE PROCEDURE로 프로시저를 등록한다.

프로시저 등록을 마친 후 "DELIMITER ;"을 통해 다시 구분 문자를 ";"으로 바꿔준다.

 

call 프로시저명; // 프로시저 호출
DROP PROCEDURE 프로시저명; // 프로시저 삭제

 

 

 

이벤트 스케줄러란?

MySQL 서버에 기본적으로 내장된 구성 요소로, 이벤트를 실행하는데 사용된다.

이벤트 스케줄러를 사용하기 위해서는 설정을 해주어야 한다.

 

이벤트 스케줄러 조회

SHOW VARIABLES LIKE 'event%'

 

이벤트 스케줄러 ON으로 활성화

SET GLOBAL event_scheduler = ON;

 

 

 

 

이벤트 스케줄러, 프로시저 실행 예시

테이블 생성 및 데이터 삽입

CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(50),
    age INT
);

INSERT INTO users VALUES
(1, 'name', 20),
(2, 'name2', 21);

 

프로시저 생성

DELIMITER //
CREATE PROCEDURE update_user_age
(
    IN p_id INT,
    IN p_age INT
)
BEGIN
    UPDATE users
    SET age = p_age
    WHERE id = p_id;
END //
DELIMITER ;

 

프로시저 생성 확인

SHOW PROCEDURE STATUS;

 

프로시저 호출

CALL update_user_age(2, 40); // id가 2인 사용자의 나이를 40으로 업데이트

 

이벤트 생성

CREATE EVENT users_event
    ON SCHEDULE EVERY 1 MINUTE
    STARTS '2023-10-07 00:00:00'
    COMMENT 'Update age of user with id 1 every minute'
    DO
      CALL update_user_age(1, 40);
      
      //1분마다 id가 1인 사용자의 나이를 40으로 업데이트 하는 이벤트 생성

 

생성된 이벤트 조회

SHOW EVENTS;