MySQL插入与While循环

jes*_*er3 28 mysql while-loop

我正在尝试在我的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
Run Code Online (Sandbox Code Playgroud)

这是错误:

[查询1中的错误]您的SQL语法中有错误; 查看与您的MySQL服务器版本对应的手册,以便在'SET i = 2376921001 WHILE(i <= 237692200)附近使用正确的语法DO INSERT INTO coupon(第2行的couponCod'执行停止!

我尝试了一个具有相同结果的声明.代码如下:

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
Run Code Online (Sandbox Code Playgroud)

我尝试过的另一件事是@i而不是我.同样的错误.谁能看到我做错了什么?

小智 26

drop procedure if exists doWhile;
DELIMITER //  
CREATE PROCEDURE doWhile()   
BEGIN
DECLARE i INT DEFAULT 2376921001; 
WHILE (i <= 237692200) DO
    INSERT INTO `mytable` (code, active, total) values (i, 1, 1);
    SET i = i+1;
END WHILE;
END;
//  

CALL doWhile(); 
Run Code Online (Sandbox Code Playgroud)

  • 虽然此代码段可以解决问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高帖子的质量.请记住,您将来会回答读者的问题,而这些人可能不知道您的代码建议的原因. (3认同)

Ruu*_*man 23

你不能那样用WHILE; 看:mysql DECLARE WHILE外存储过程怎么样?

您必须将代码放在存储过程中.例:

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
Run Code Online (Sandbox Code Playgroud)

小提琴:http://sqlfiddle.com/#!2/a4f92/1

或者,INSERT使用您喜欢的任何编程语言生成语句列表; 对于一次性创作,应该没问题.举个例子,这是一个Bash单线程:

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

顺便说一句,你的数字输了一个错字; 2376921001有10位数,237692200只有9.

  • 我有一个`#1064 - 你的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在"第3行"附近使用5.1 ...关于这应该有用的文档:/ (3认同)