在单个时间或每个循环中插入大数据?

时间:2016-09-09 19:32:03

标签: php mysql foreach insert

我有超过3000行的数据。所以以前我需要将这些数据导入另一个tabe。以前我就是这样做的,如下所示

endian_variable = native_variable

然后我想通过连接到mysql并运行插入查询每次消耗一些时间虽然我们最初创建了连接。所以我尝试先创建查询,然后插入

所以只有一次mysql执行,这避免了每次连接和插入等

<?php
foreach($datas as $data){
 //INSERT INTO table_name with $data 
 $con->query('insert query');
}

?>

我喜欢第二种方法,但问题是,如果有任何一行数据无效,则整个查询失败。

如果它在foreach插入中,则只有当前行插入失败,其他数据将被插入。

有没有办法插入一堆但是如果有任何单行数据无效只有那一行不应该插入而其他行应该插入表中而不是整个查询失败?

注意:我使用<?php foreach($datas as $data){ //INSERT INTO table_name with $data //Concatenate each row and make single insert query with , separated values } //finally run the mysql insert with php $con->query('insert query'); //so only one time we call mysql server ?> 作为整个查询值。 3000多行数据很小,但我会经常这样做。这就是寻找表演的原因。上面的代码只是模板而不是真正的代码。

1 个答案:

答案 0 :(得分:1)

如果你想要性能,那么尽量减少尽可能多的php交互。这意味着直接LOAD DATA INFILE或从表到表的预先存在的数据,使用仅sql运动。换句话说,没有PHP循环。

关于你的意见,允许一些人失败:

对于数据加载,请使用LOAD DATA INFILE IGNORE。请注意ingore一词。

对于预先存在的数据移动,请使用INSERT IGNORE。与insert相同,只需添加ignore。

与PHP驱动的循环方法相比,您不会因此而牺牲性能。