MySQL插入与While循环

时间:2014-11-17 21:01:36

标签: 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

这是错误:

[查询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

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

2 个答案:

答案 0 :(得分:22)

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(); 

答案 1 :(得分:19)

你不能那样使用WHILE;见:mysql DECLARE WHILE outside stored procedure how?

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

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

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

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

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

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