YS's develop story

MySQL 프로시저 활용해 쿼리 반복 실행하기 (MySQL 쿼리 반복 실행) 본문

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개가 넘는 데이터가 테이블에 한 번에 들어간 것을 확인할 수 있습니다.

 

 

Comments