如何一次将大量数据插入mySQL数据库?

时间:2015-11-19 09:21:47

标签: php mysql

我将文本文件中的数据插入到mySQL数据库中,一次插入大约6000个或更多条目。

try {
   $sql = "INSERT INTO data (id,name,date,place) values(?,?,?,?) ";
   $q = $pdo->prepare($sql);
   foreach($data as $row) {
      $q->execute(array($row['id'], $row['name'], $row['date'], $row['place']));
   }
}
catch (PDOException $pe) {
   echo $pe->getMessage();
}
catch (Exception $e ) {
   echo $e->getMessage();
}

我尝试了3000个条目,一切正常。但是,如果我要插入更多数据,则会发生我的页面空白,并且没有任何内容插入到我的数据库中。

什么可能导致这个问题,我该如何解决?

4 个答案:

答案 0 :(得分:3)

由于您已有文本文件,请使用以下查询

LOAD DATA INFILE 'file/path/to/file.txt' 
INTO TABLE table-name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

确保文件中的数据与表格行一致。

在此处阅读更多https://dev.mysql.com/doc/refman/5.6/en/load-data.html

答案 1 :(得分:2)

使用mysql LOAD DATA INFILE

参考This Answer

如果你使用PDO或类似的循环,你做错了,慢了。

答案 2 :(得分:1)

  

使用VALUES语法的NSERT语句可以插入多行。为此,请包含多个列值列表,每个列值都括在括号内并用逗号分隔。例如:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

来自How to do a batch insert in MySQL

答案 3 :(得分:1)

您应该使用多插入语法,而不是在循环内运行多个查询。例如:

INSERT INTO data (id,name,date,place) VALUES (:id1,:name1,:date1,:place1), (:id2,:name2,:date2,:place2), (:id3,:name3,:date3,:place3);

查看this article关于使用预准备语句进行多次插入的信息。