Database/MySQL
MySQL 프로시저 활용해 쿼리 반복 실행하기 (MySQL 쿼리 반복 실행)
Yusang
2022. 2. 8. 09:46
⌛ Problem
Insert문을 활용하여 테이블에 1000개가 넘는 데이터를 넣으려면 어떻게 해야 할까요?
Insert문을 1000번 실행하는 건 매우 비효율적으로 보입니다.
📜 Solution
Procedure을 활용하면 같은 쿼리문을 반복적으로 실행할 수 있습니다.
Person이라는 테이블에 아래와 같이 sql문을 활용하여 데이터를 반복적으로 넣을 수 있습니다.
CREATE PROCEDURE loopInsert()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 1000
DO
INSERT INTO Person(nickname, money, lastVisit)
VALUES (값1,값2,값3);
SET i = i + 1;
END WHILE;
END;
9글자의 랜덤 문자열을 생성하고, 100000까지의 숫자 중 랜덤으로 숫자를 하나 생성하고,
2022-02-01부터 2022-02-28까지의 날짜 중 하나를 랜덤으로 뽑아서
테이블에 데이터를 1000개 생성하는 쿼리문입니다.
CREATE PROCEDURE loopInsert()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= 1000
DO
INSERT INTO Person(nickname, money, lastVisit)
VALUES (CONCAT(CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97),
CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97),
CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97), CHAR(RAND() * 24 + 97)),
rand() * 100000,
FROM_UNIXTIME(FLOOR(unix_timestamp('2022-02-01 00:00:00') +
(RAND() * (unix_timestamp('2022-02-28 00:00:00') -
unix_timestamp('2022-02-01 00:00:00'))))));
SET i = i + 1;
END WHILE;
END;
생성한 procedure을 호출해 줍니다.
CALL loopInsert();
저는 i값을 바꿔서 호출했습니다.
그 결과 2000개가 넘는 데이터가 테이블에 한 번에 들어간 것을 확인할 수 있습니다.