😭개발을 하다보면 대량의 데이터가 필요할 수 있습니다.
이를 위한 방법에는 아래와 같은 방법들이 있습니다.
🧐먼저 아래와 같이 테이블을 만들고 2개의 데이터를 넣겠습니다.
CREATE TABLE `member` (
id INT UNSIGNED NOT NULL AUTO_INCREMENT primary key,
login_date DATETIME NOT NULL,
login_id CHAR(100) NOT NULL,
login_pw VARCHAR(100) NOT NULL,
`user_name` CHAR(100) NOT NULL
);
INSERT INTO `member`
SET login_date = NOW(),
login_id = 'user1',
login_pw = 'user1',
`user_name` = '홍길동';
INSERT INTO `member`
SET login_date = NOW(),
login_id = 'user2',
login_pw = 'user2',
`user_name` = '홍길순';
select * from member;
🧐확인하면 2개의 데이터가 들어가 있는 것을 확인 할 수 있습니다.
다음 아래 쿼리를 여러번 실행해 줍니다.
INSERT INTO `member` (login_date, login_id, login_pw, `user_name`)
SELECT NOW(), UUID(), UUID(), concat('아무개-',floor(RAND()*100))
FROM `member`;
해당 쿼리를 수행하게 되면 기존 2개 -> 4개로 늘어나게 되는데 이후 쿼리를 실행할때마다 기존 * 2 만큼 데이터가 증가하게 됩니다.
여러번 쿼리를 수행하고 나서
count()
를 통해 데이터가 얼마나 들어가는지 확인해보시면 됩니다.
😎위 테이블을 삭제하고 다시 테이블을 생성해주고 나서 아래의 쿼리를 실행해줍니다.
WITH RECURSIVE numbers_cte (n, login_date, login_id, login_pw, user_name) AS (
SELECT 1, NOW(), UUID(), UUID(), concat('아무개-',floor(RAND()*100))
UNION ALL
SELECT n+1, NOW(), UUID(), UUID(), concat('아무개-',floor(RAND()*100))
FROM numbers_cte
WHERE n < 100
)
SELECT * FROM numbers_cte;
🫠
recursive
를 통해 100개의 데이터를 넣는 작업을 하게 되는데 위의 작업을 하게 되면 테이블에 값을 넣는게 임시로 테이블을 만들어서 보여주는 것이기에 데이터를 넣으려면 아래의 구문을 추가해주시면 됩니다.
insert into member <--- 추가
WITH RECURSIVE numbers_cte (n, login_date, login_id, login_pw, user_name) AS (
SELECT 1, NOW(), UUID(), UUID(), concat('아무개-',floor(RAND()*100))
UNION ALL
SELECT n+1, NOW(), UUID(), UUID(), concat('아무개-',floor(RAND()*100))
FROM numbers_cte
WHERE n < 1000
)
SELECT * FROM numbers_cte;
🫡
insert into
를with 구문
아래에 넣을 경우 에러가 나오기에 위의 추가해주시면 됩니다.그러나 위 방법은 1000개가 넘어갈 경우 에러가 나오기에 만약 1000개가 넘는 데이터를 넣고 싶다면 설정파일에서
@@cte_max_recursion_depth
의 값을 원하는 값으로 설정해주시면 됩니다.
위 방법외에 구글에서 찾아보니 프로시져를 통해서 하는 방법을 많이 사용하는 것 같습니다. 편하신 방법을 이용하시면 될 것 같습니다.