如何使用单个查询将例如100 000行插入MySQL表中?
答案 0 :(得分:8)
insert into $table values (1, a, b), (2, c, d), (3, e, f);
这将执行3行的插入。根据需要继续达到100,000。在做ETL工作的时候我会用~1,000块。
如果你的数据静态存在于文件中,转换它并使用加载数据infile 将是最好的方法,但我猜你是因为你做了类似的事情而要求这个。
另请注意其他人对max_allowed_packet大小的说法限制了查询的长度。
答案 1 :(得分:3)
您可以使用INSERT语句执行批量插入,但您的查询不能大于(略小于)max_allowed_packet。
对于100k行,根据行的大小,您可能会超过此值。
一种方法是将其分成几个块。无论如何,这可能是一个好主意。
或者,您可以使用LOAD DATA INFILE(或LOAD DATA LOCAL INFILE)从制表符分隔(或其他分隔)文件加载。有关详细信息,请参阅文档。
LOAD DATA不受max_allowed_packet限制。
答案 2 :(得分:0)
尝试使用LoadFile() 或者将yor Data转换为XML文件,然后使用Load和Extract()函数将数据加载到MySQL数据库中。
这是One Query和Fastest选项,
即使我也这样做,我有大约数百万行的1.5 GB文件。在我的案例中,我使用了两种选项。
答案 3 :(得分:-1)
据我所知,你不能。你需要一个循环。