YS's develop story
MySQL 프로시저 활용해 쿼리 반복 실행하기 (MySQL 쿼리 반복 실행) 본문
⌛ 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개가 넘는 데이터가 테이블에 한 번에 들어간 것을 확인할 수 있습니다.
'Database > MySQL' 카테고리의 다른 글
MySQL 시간차이 계산하기 (TIMESTAMPDIFF 함수) (0) | 2021.08.23 |
---|---|
MySQL 여러개의 데이터 한번에 저장하기 (Node js, mysql2 promise) (0) | 2021.07.01 |
MySQL 최근에 추가된 값 인덱스 찾기 LAST_INSERT_ID() 함수 활용 (0) | 2021.06.21 |
MySQL 요일을 구하는 함수 WEEKDAY (0) | 2021.06.16 |
[1822] Failed to add the foreign key constraint MySQL에러 (0) | 2021.05.16 |
Comments