MySQL 用 While 循环插入

Posted

技术标签:

【中文标题】MySQL 用 While 循环插入【英文标题】:MySQL Insert with While Loop 【发布时间】:2015-01-14 21:48:23 【问题描述】:

我正在尝试在我的 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 附近使用正确的语法 虽然(我 coupon(第 2 行的优惠券Cod' 执行停止!

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

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。同样的错误。 谁能看到我做错了什么?

【问题讨论】:

你的表的定义是什么......'code'是如何声明的? 代码是一个 varchar。运行此命令时出现相同的错误: BEGIN DECLARE @i VARCHAR unsigned DEFAULT 1001; WHILE (i coupon (couponCode, active, totalUses) 值 (i, 1, 1);设置 i = i+1;结束;结束 【参考方案1】:
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(); 

【讨论】:

虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。【参考方案2】:

你不能这样使用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 单行代码:

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

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

【讨论】:

是的,提供了数字,我没有进去查看。谢谢你抓住那个。我从你的帖子中得到的是,没有办法用 SQL 来做到这一点。我必须提取代码并使用 php 生成每个单独的语句。 @jessier3:你误会了;在 MySQL 中是完全有可能的。我添加了示例代码和一个小提琴来澄清。但请随意使用替代方法;任何你觉得方便的东西。 这已经有一段时间了,我忘了回来评论。这行得通。感谢您的帮助。 我有一个带有 5.1 的#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 ...关于这应该可以工作的文档:/ @Megachip 请使用十六进制查看器检查您的 SQL 语句;里面可能有一些不可见的 Unicode 字符。

以上是关于MySQL 用 While 循环插入的主要内容,如果未能解决你的问题,请参考以下文章

while循环添加日期的MYSQL程序

利用mysql存储过程循环插入新数据并更新

MySQL---循环结构演练

使用while循环在表中插入多条记录[关闭]

如何在使用 Hash.Lib 的同时使用 while 循环插入值?

用JDBC循环插入数据