如何在MySQL中插入大量行?

8

如何使用单个查询向MySQL表中插入例如100,000行数据?


显而易见的问题是“从哪里开始?”如果答案是从记忆中开始,那么请小心地开始键入SQL文件。否则,请使用适当的语言和环境。 - Matthew Flaschen
4个回答

8
insert into $table values (1, a, b), (2, c, d), (3, e, f);

这将插入3行数据。如果需要,请继续操作以达到100,000行。在进行ETL工作时,我通常使用这种方式进行约1,000个块。

如果您的数据静态存储在文件中,转换数据并使用load data infile是最佳方法,但我猜您提出这个问题是因为您正在做类似的事情。

还要注意其他人提到的max_allowed_packet大小限制查询长度的问题。


3
您可以使用INSERT语句进行批量插入,但查询的大小不能超过(稍微小于)max_allowed_packet。
对于100k行数据,根据行大小的不同,您可能会超出此限制。
一种方法是将其分成几个块。这也许是个好主意。
或者,您可以使用LOAD DATA INFILE(或LOAD DATA LOCAL INFILE)从制表符分隔(或其他分隔)文件加载数据。详见文档。
LOAD DATA不受max_allowed_packet限制。

0
尝试使用LoadFile()或将数据转换为XML文件,然后使用Load和Extract()函数将数据加载到MySQL数据库中。
这是一种查询最快的选择,
即使我也在做同样的事情,我有大约数百万行的1.5 GB文件。在我的情况下,我使用了两个选项。

-1
据我所知,你不能这样做。你需要一个循环。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接