지직전기
[트러블슈팅] 프로시저를 이용한 더미데이터 생성 본문
상황 및 원인
식당 예약을 위한 식당 더미데이터를 생성하기 위한 과정 중 데이터 크롤링으로 가져온 데이터 중에 일부 빠진 항목을 넣기 위함.
식당 더미데이터 약 800개 정도에 랜덤으로 카테고리, 편의시설 등을 넣어주려고 하였음.
처음 INSERT문을 사용해 넣고자 하였으나 랜덤으로 넣는 것과 800개나 되는 데이터에 모두 넣는 방법이 없을까 고민함.
해결 방법
기존 Mysql 내용을 배울 때 프로시저를 이용해 변수를 지정하고 JAVA에서 사용하듯 반복문을 사용했던 기억이 생각남
이를 프로시저 LOOP문을 통해 해결하고자 찾아봄
1. 식당 테이블에 들어갈 카테고리와 편의시설을 tmp테이블을 생성하여 값을 넣어줌
2. 프로시저 LOOP문을 활용하여 식당테이블 카테고리 또는 편의시설에 tmp에 들어간 값을 랜덤으로 3~5개씩 넣어줌
아래는 같은 방법으로 메뉴별 가격을 랜덤으로 넣어준 코드임.
DELIMITER //
CREATE PROCEDURE InsertRandomMenus()
BEGIN
DECLARE i INT DEFAULT 37;
DECLARE max_id INT DEFAULT 800;
DECLARE rand_limit INT;
DECLARE menu_price INT;
-- 가격 목록을 저장할 테이블 생성
CREATE TEMPORARY TABLE tmp_prices (
price INT
);
-- 가격 목록을 임시 테이블에 삽입
INSERT INTO tmp_prices (price) VALUES
(10000), (11000), (12000), (13000), (14000);
WHILE i <= max_id DO
-- 3~5개의 무작위 메뉴 선택 및 삽입
SET rand_limit = FLOOR(3 + (RAND() * 3)); -- 3에서 5 사이의 무작위 수
-- 메뉴 삽입
INSERT INTO restaurant_menu (menu_name, price, menu_img, menu_info, restaurant_id)
SELECT
menu_name,
(SELECT price FROM tmp_prices ORDER BY RAND() LIMIT 1) AS price,
'default.jpg',
'',
i
FROM tmp_menus
ORDER BY RAND()
LIMIT rand_limit;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;

'STUDY > Troubleshooting' 카테고리의 다른 글
| [최적화] OpenGL 렌더링 성능향상 - Display List (0) | 2025.04.20 |
|---|---|
| [트러블 슈팅] 항적 관리 간 삭제, 업데이트 충돌 문제 - Race Condition(경쟁 상태) (1) | 2025.04.18 |
| [트러블 슈팅]JPA 사용 중 N+1 문제 (2) | 2024.05.23 |
| [트러블 슈팅]VUE.js 설치 간 실행 오류 (0) | 2024.04.22 |