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)를 사용하여 생성된 숫자와 무작위로 생성된 날짜 및 시간을 포함합니다.
- with recursive :
- 함수와 유사한 개념으로 볼 수 있지만, SQL 쿼리 내에서 '일시적으로 생성'되는 '테이블'과 유사한 구조.
- 함수는 독립적인 코드 블록으로, 특정 작업을 수행하고 결과를 반복
-- 함수 정의 CREATE FUNCTION AddNumbers(a INT, b INT) RETURNS INT BEGIN RETURN a + b; END; -- 함수 호출 SELECT AddNumbers(5, 3); - 재귀적 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: 특정 일 수를 나타내는 시간 간격을 지정합니다.
-
- NOW(): 현재 날짜와 시간을 반환하는 함수입니다.
- RAND(): 0과 1 사이의 난수를 생성하는 함수입니다.
- FLOOR(RAND() * 3650 + 1): 0부터 3650 사이의 난수를 생성한 후, 소수점을 버리고 정수로 만드는 함수입니다. 이 식은 1부터 3650 사이의 임의의 정수를 생성합니다.
- INTERVAL ... DAY: 특정 일 수를 나타내는 시간 간격을 지정합니다.
- DATE_SUB(date, INTERVAL expr unit): 주어진 날짜에서 지정된 시간 간격을 빼는 함수입니다.
'알고리즘' 카테고리의 다른 글
| [알고리즘] hashMap을 이용한 단어 갯수 세기_프로그래머스 문제(A로 B 만들기) (0) | 2024.01.29 |
|---|---|
| [알고리즘]hashSet의 장점을 이용한 중복제거 문제_프로그래머(중복된 문자 제거) (0) | 2024.01.29 |
| [알고리즘] 특정날짜의 요일 구하기_영어로 출력_해커랭크문제_Java Date and Time(Scanner 버퍼로 읽는 방법) (0) | 2024.01.26 |
| [알고리즘]문자열의 위치에서 배열 정렬하기_charAt_프로그래머스문제(문자열 내 마음대로 정렬하기) (0) | 2024.01.25 |
| [알고리즘] stream를 이용해서 문자열의 오름차순하기_프로그래머스 문제(문자열 내림차순으로 배치하기) (0) | 2024.01.25 |