使用php将大型csv文件导入mysql数据库

7

我有一个非常大的CSV文件(150 MB),将其导入MySQL的最佳方式是什么? 在将其插入MySQL表之前,我需要在PHP中进行一些操作。


请查看我的解决方案,网址为https://dev59.com/fGMm5IYBdhLWcg3wi_m0#22744300,其中包括一些比较。 - Raza Ahmed
2个回答

6
你可以查看MySQL中的LOAD DATA INFILE。在将数据读入PHP之前,可以将数据加载到MySQL中并进行操作。使用LOAD DATA INFILE将原始数据存储在临时表中,然后使用以下语句将数据转换为目标表:
INSERT INTO targettable (x, y, z)
SELECT foo(x), bar(y), z
FROM temptable

+1 用于 LOAD DATA INFILE。如果您使用 phpmyadmin(显然是 PHP :)),您可以轻松地比较几种方法,最受欢迎的有:SELECT INTO 和带有其所有不同参数和参数的LOAD DATA INFILE。您将知道什么最适合您。很可能是LOAD DATA INFILE。 - Matt Bannert
根据数据的操作量,如果需要进行较多的操作,则最好先将其读入php,然后逐行插入。如果操作量很大,则在脚本中执行操作更有效率,然后可以使用LOAD DATA INFILE和UPDATE TABLE查询来完成两个操作。 - thomasmalt

3

我会使用fopen打开文件,并使用fgetcsv将每行读入数组中。伪代码如下:

mysql_connect( //connect to db);

$filehandle = fopen("/path/to/file.csv", "r");
while (($data = fgetcsv($filehandle, 1000, ",")) !== FALSE) {
    // $data is an array
    // do your parsing here and insert into table
}

fclose($filehandle)

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