알고리즘

무작위로 데이터 100만개 넣기 (날짜 포함)

seulhasony 2025. 5. 15. 11:31

 

set session cte_max_recursion_depth = 1000000;

 

//데이터베이스 세션에서 공통 테이블 표현식(CTE)의 재귀 깊이 제한을 설정하는 SQL 명령입니다. 이 명령은 특정 세션 동안만 유효하며, 재귀 CTE가 무한 루프에 빠지지 않도록 제한을 설정합니다

 

insert into boards (title, content, created_at )

with recursive cte (n) as

(

select 1 //초기값 1로 세팅

union all 

select n + 1 from cte where n < 1000000 // 값을 1씩 증가시키면 N이 1000000보다 작을 때까지 계속 SELECT

)

select

concat('title',LPAD(n,7,'0')) as title,

concat('content',LPAD(n,7,'0'))as content,

TIMESTAMP(DATE_SUB(NOW(),interval FLOOR(RAND() * 3650 + 1 ) DAY) + interval FLOOR(RAND()*86400)second)as created_at

from cte;

 

// 이 쿼리는 boards 테이블에 1,000,000개의 레코드를 삽입하는 작업을 수행합니다. 각 레코드는 재귀 CTE(Common Table Expression)를 사용하여 생성된 숫자와 무작위로 생성된 날짜 및 시간을 포함합니다.

 

  1. with recursive :
    • 함수와 유사한 개념으로 볼 수 있지만, SQL 쿼리 내에서 '일시적으로 생성'되는 '테이블'과 유사한 구조.
    1. 함수는 독립적인 코드 블록으로, 특정 작업을 수행하고 결과를 반복
      -- 함수 정의
      CREATE FUNCTION AddNumbers(a INT, b INT)
      RETURNS INT
      BEGIN
          RETURN a + b;
      END;
      
      -- 함수 호출
      SELECT AddNumbers(5, 3);​
       
    2. 재귀적 CTE는 계층적 데이터 구조를 탐색하거나 반복적인 데이터 생성 작업을 수행하는데 사용
      WITH RECURSIVE Numbers AS (
          SELECT 1 AS num
          UNION ALL
          SELECT num + 1
          FROM Numbers
          WHERE num < 10
      )
      SELECT * FROM Numbers;

 

  2. CONCAT : 문자열 합치기

  3. LPAD(n, 7,'0'): n의 왼쪽으로 7자리 0으로 채우기

  4. TIMESTAMP: 최종결과 타임스탬프로 변환

  5. DATE_SUB(NOW(), interval FLOOR(RAND() * 3650 + 1) DAY):

  • 현재 날짜와 시간에서 무작위로 생성된 일수를 뺍니다. --> DATE_SUB
  • 예: NOW()가 2023-10-05 14:23:45이고, 무작위 일수가 1827일 경우, 2023-10-05 14:23:45에서 1827일을 빼면 2018-01-01 14:23:45가 됩니다.
  • INTERVAL ... DAY: 특정 일 수를 나타내는 시간 간격을 지정합니다.
    1. NOW(): 현재 날짜와 시간을 반환하는 함수입니다.
    2. RAND(): 0과 1 사이의 난수를 생성하는 함수입니다.
    3. FLOOR(RAND() * 3650 + 1): 0부터 3650 사이의 난수를 생성한 후, 소수점을 버리고 정수로 만드는 함수입니다. 이 식은 1부터 3650 사이의 임의의 정수를 생성합니다.
    4. INTERVAL ... DAY: 특정 일 수를 나타내는 시간 간격을 지정합니다.
    5. DATE_SUB(date, INTERVAL expr unit): 주어진 날짜에서 지정된 시간 간격을 빼는 함수입니다.