본문 바로가기
MySql

MySQL While 루프를 사용한 MySQL 삽입

by 베이스 공부 2020. 11. 28.
반응형

내 MySQL 데이터베이스에 많은 레코드를 만들려고합니다. 이것은 일회성 생성이므로 저장 프로 시저를 생성하지 않습니다. 내 코드는 다음과 같습니다.

BEGIN
SET i = 2376921001;
WHILE (i <= 237692200) DO
    INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
    SET i = i+1;
END WHILE;
END

오류는 다음과 같습니다.

[쿼리 1 오류] SQL 구문에 오류가 있습니다. 'SET i = 2376921001 근처에서 사용할 올바른 구문은 MySQL 서버 버전에 해당하는 설명서를 확인하십시오. WHILE (i <= 237692200) DO INSERT INTO coupon (couponCod' at line 2 실행이 중지되었습니다!

동일한 결과로 Declare를 시도했습니다. 아래 코드 :

BEGIN
DECLARE i INT unsigned DEFAULT 2376921001;
WHILE (i <= 237692200) DO
    INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
    SET i = i+1;
END WHILE;
END

내가 시도한 다른 한 가지는 i 대신 @i를 사용하는 것입니다. 같은 오류입니다. 아무도 내가 뭘 잘못하고 있는지 볼 수 있습니까?

 

해결 방법

 


저장 프로 시저에 코드를 넣어야합니다. 예:

CREATE PROCEDURE myproc()
BEGIN
    DECLARE i int DEFAULT 237692001;
    WHILE i <= 237692004 DO
        INSERT INTO mytable (code, active, total) VALUES (i, 1, 1);
        SET i = i + 1;
    END WHILE;
END


또는 원하는 프로그래밍 언어를 사용하여 INSERT 문 목록을 생성합니다. 일회성 생성의 경우 괜찮습니다. 예를 들어 다음은 Bash 한 줄짜리입니다.

for i in {2376921001..2376921099}; do echo "INSERT INTO mytable (code, active, total) VALUES ($i, 1, 1);"; done

그건 그렇고, 당신은 당신의 숫자에 오타를 만들었습니다. 2376921001은 10 자리, 237692200은 9입니다.

 

참조 페이지 https://stackoverflow.com/questions/26981901

 

 

반응형

댓글