본문 바로가기

쿠러미

Mysql 프로시저로 더미데이터 생성

본격적인 성능 테스트를 하기 전에, 비교적 정확한 비교를 위해 더미데이터를 넣어보고자 한다.

더미데이터를 넣는 방법은 여러가지가 있지만, 가장 기본적인 방법으로 넣어보고 싶어 프로시저를 통해 더미데이터를 넣게 됐다.

 

프로시저 생성 방법

DELIMITER $$

CREATE PROCEDURE <생성할 프로시저 이름>(
    IN <파라미터명> <타입>,
    IN <파라미터명> <타입>,
    OUT <파라미터명> <반환 타입>
)
BEGIN
    DECLARE <변수명> <타입> <기타 옵션>;
    # 중략... 다른 쿼리 명령문

END $$
DELIMITER ;

 

대략적인 생성 방법은 이런식이다.

 

DELIMITER $$

  • 프로시저 내부에 존재하는 쿼리 명령문은 " ; "로 끝난다. 이로 인해서 쿼리가 실행되버리면 안되기 때문에 해당 DELIMETER 속에 존재하는 ;를 $$로 변환해, 실행되지 않도록 막기 위한 명령어이다.

DELIMITER ;

  • DELIMETER 의 명령어 구분자 $$를 다시 ;로 바꾸어 쿼리가 실행될 수 있도록 한다.

BEGIN & END

  • BEGIN 과 END 사이에는 수행할 쿼리를 나열하면 된다.

END &&

  • 앞에 DELIMITER $$로 인해 END $$를 해야 프로시저의 끝임을 알 수 있다.

IN

  • 프로시저를 호출 시 파라미터가 필요할 때, "IN"을 사용한다.

OUT

  • 프로시저의 결과값이 필요한 경우 "OUT"을 사용한다.

DECLARE

  • 변수의 선언이 필요한 경우에 사용한다.

 

DROP PROCEDURE IF EXISTS marketplace.createDummyMarket;

DELIMITER $$
$$
CREATE DEFINER=`marketplace`@`%` PROCEDURE `marketplace`.`createDummyMarket`(IN total_count INT)
BEGIN
    DECLARE counter INT DEFAULT 0;

    -- 반복문을 사용하여 total_count만큼 데이터를 삽입
    WHILE counter < total_count DO
        INSERT INTO market (
            name, 
            description, 
            operation_hours, 
            closed_days, 
            phone_number, 
            address, 
            thumbnail, 
            category_id, 
            local_government_id, 
            is_deleted,
            created_at,   
            modified_at   
        )
        VALUES (
            CONCAT('Market ', counter),                      -- name (예: Market 0, Market 1, ...)
            CONCAT('Description for Market ', counter),      -- description (예: Description for Market 0)
            '09:00 AM - 06:00 PM',                           -- operation_hours
            'Sunday',                                       -- closed_days (예: Sunday)
            CONCAT('010-1234-', LPAD(FLOOR(RAND() * 10000), 4, '0')), -- phone_number (예: 010-1234-0000)
            '인천광역시 서구',    -- address (예: Seoul, Gangnam-gu, Street 0)
            '7d534a14-5618-4ef5-901c-af5c26e4fba2_chris6.jpeg',              -- thumbnail (예시로 같은 이미지 URL 사용)
            1,                          -- category_id (임의의 category_id, 1~10 범위)
            58,                          -- local_government_id (임의의 local_government_id, 1~10 범위)
            FALSE,                                            -- is_deleted (기본적으로 false로 설정)
            NOW(),
            NOW()
        );

        -- 카운터 증가
        SET counter = counter + 1;
    END WHILE;
END
$$
DELIMITER ;

 

나의 경우 CALL marketplace.createDummyMarket(100000);

이런식으로 매개변수를 넣어 원하는 양의 더미데이터를 넣을 수 있도록 설정했다.