본문 바로가기
Database

[MYSQL] 더미데이터 생성 쿼리!!

by GoodDayDeveloper 2021. 3. 31.
반응형

 

안녕하세요.

더미데이터 만들기 위한 쿼리를 생성하여 합니다.

 

더미데이터란, 유용한 데이터가 포함되어 있지 않지만 공간을 예비해두어 실제 데이터가 명목상 존재하는 것처럼 다루는 유순한 정보를 의미 라고 하네요.

 

쉽게 말해서 무언가를 테스트할때 임시로 데이터를 만든다고 보시면 됩니다.

 

예를들어 페이징을 하기 위해서는 게시글이 많아야하는것처럼 말이죠!

 


 

 

첫번째 방법입니다.

 

 

 

게시판테이블의 모습입니다. 데이터가 아무것도 들어가 있지 않죠.

 

 

 

아래 쿼리를 실행합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$
 
CREATE PROCEDURE loopInsert()
BEGIN
    DECLARE i INT DEFAULT 1;
        
    WHILE i <= 500 DO
        INSERT INTO tbl_board(board_title , board_content, board_writer , board_regdate)
          VALUES(concat('제목',i), concat('내용',i), 'Admin', now());
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER $$
 
 
CALL loopInsert;
cs

 

해석을 해보자면...

 

DELIMITER $$ 는 직역하면 '구문 문자'로 세미콜론(;) 으로 생각하시면 되며, 맨 처음과 끝에 사용하므로써 문법의 끝을 나타냅니다. 

IF EXISTS loopInsert$$  loopInsert 이름의 프로시저가 있다면,

DROP PROCEDURE 명령을 사용하여 기존 프로시저를 삭제한 다음,

CREATE PROCEDURE loopInsert() loopInsert를 만듭니다.


BEGIN 시작합니다.

 

DECLARE(변수선언객체)로 i라는 변수를 선언해주고,

 

INT DEFAULT 1; 인트형으로 기본값은 1입니다.

 

WHILE i <= 500 DO 밑에 있는 애들을 i가 1씩 더해지면서 500번 반복합니다.

 

INSERT INTO tbl_board(board_title , board_content, board_writer , board_regdate)      VALUES(concat('제목',i), concat('내용',i), 'Admin', now());SET i = i + 1;

END WHILE; 반복을 마칩니다.

 

END$$ 끝

 

CALL loopInsert;  loopInsert를 실행합니다.


 

 

추가로 숫자 데이터를 증가시키는 방법은 반복문 안에 변수를 넣어준 다음,

 

INSERT의 VALUES안에 변수에 연산을 하면 됩니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
DELIMITER $$
DROP PROCEDURE IF EXISTS loopInsert$$
 
 
 
CREATE PROCEDURE loopInsert()
BEGIN
    DECLARE i INT DEFAULT 1;
        
    WHILE i <= 200000 DO
    
    SET @increment_value = (SELECT MAX(MTT_TIME) FROM MTT_TEST) ;
    
        INSERT INTO MTT_TEST(MTT_HOGI , MTT_LOT, MTT_DATE ,MTT_TIME, MTT_1,MTT_2,MTT_3,MTT_4,MTT_5,MTT_6,MTT_7)
          VALUES('CTS10''DSFASFAEQD''2024-06-22  12:51:47 PM',@increment_value + 10000-0.189-0.232,-0.292,4,-1,2.8,-2.8);
        SET i = i + 1;
    END WHILE;
END$$
DELIMITER $$
 
 
CALL loopInsert;
cs

 

반응형

 

두번째 방법입니다.

 

 

데이터가 이렇게 있습니다.

인덱스가 제멋대로이지만... 이걸로 테스트해보겠습니다.

이미지에서와 같이 10개의 데이터가 있습니다.

 

insert와 select를 통해서 10개의 데이터를 그대로 복사해서 저장합니다. 

즉, 기존 데이터를 두배로 늘리는거죠!

문법입니다. 

 

insert into 테이블명 (컬럼1, 컬럼2) (select 컬럼1, 컬럼2 from 테이블명);

예) insert into tbl_reserve (resv_name, resv_tel) (select resv_name, resv_tel from tbl_reserve);

 

컬럼 전부를 넣지 않고 넣고 싶은 컬럼만 입력하셔도 됩니다.

저는 이름과 전화번호만 하겠습니다.

 

 

 

 

주의할 사항은 인덱스를 넣으면 고유키가 중복이 되기 때문에 위와 같이 에러가 발생하니 주의하셔야합니다!

인덱스를 빼고 실행해보겠습니다!

 

 

 

 

저장이 잘 된거 같네요 ㅎ 

조회해보겠습니다.

 

 

 

 

이름값과 전화번호가 그대로 들어가고 20개의 데이터가 있는 것을 알 수 있습니다!

 

 

 

반응형

댓글