작성
·
106
0
-- 높은 재귀(반복) 횟수를 허용하도록 설정
-- (아래에서 생성할 더미 데이터의 개수와 맞춰서 작성하면 된다.)
SET SESSION cte_max_recursion_depth = 1000000;
-- 더미 데이터 삽입 쿼리
INSERT INTO users (name, age)
WITH RECURSIVE cte (n) AS
(
SELECT 1
UNION ALL
SELECT n + 1 FROM cte WHERE n < 1000000 -- 생성하고 싶은 더미 데이터의 개수
)
SELECT
CONCAT('User', LPAD(n, 7, '0')), -- 'User' 다음에 7자리 숫자로 구성된 이름 생성
FLOOR(1 + RAND() * 1000) AS age -- 1부터 1000 사이의 랜덤 값으로 나이 생성
FROM cte;
-- 잘 생성됐는 지 확인
SELECT COUNT(*) FROM users;
SELECT n + 1 FROM cte WHERE n < 1000000 -- 생성하고 싶은 더미 데이터의 개수
SELECT n + 1 이 먼저 실행되고 FROM cte WHERE n < 1000000 이부분이 실행되니까.
n이 999999까지 실행되고 n + 1 =1000000 이니까 FROM cte WHERE n < 1000000이부분에 걸려서 1000000이 실행 안되는게 맞지 않나요?
답변 1
0
안녕하세요 zzzzz님! 질문 잘 주셨습니다:D
SELECT n + 1 FROM cte WHERE n < 1000000
에서
SELECT n + 1
이 먼저 실행되지 않고
FROM cte WHERE n < 1000000
이 먼저 실행이 됩니다!
그러다보니 n
이 999999
이더라도 정상적으로 쿼리가 실행이 된 것입니다.
다른 예로, SELECT age + 10, name FROM users WHERE age < 20;
의 쿼리를 생각해봅시다.
여기서 이 쿼리가 실행될 때는 users
테이블에서 age < 20
를 만족시키는 데이터를 먼저 뽑은 뒤에
그 뒤에 age + 10
의 값과 name
의 컬럼을 조회해서 출력합니다.
위 설명 중에서 이해 안 되시는 점 있으시면 댓글 남겨주세요~~