Mysql 插入大量数据

使用字符串拼接SQL,执行一次,效率更高。

$db = new PDO("mysql:host=;dbname=","","");
$sql = "INSERT INTO `table` () VALUES ";

foreach($arr as $k){
   $sql .= "";
}
$sql = substr($sql,0,strlen($sql)-1);
$db->exec($sql);

在执行脚本处理时,可能需要设置PHP内存和MySQL接受的包大小

1.设置PHP内存

ini_get('memory_limit'); //查看当前设置的内存
ini_set('memory_limit','1024M');   //设置内存限制

2.设置MySQL接受的包大小
MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致大数据写入或者更新失败。

查询max_allowed_packet

select @@max_allowed_packet;
show variables like 'max_allowed_packet';

mysql>  select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
|             16777216 |
+----------------------+
1 row in set (0.00 sec)

修改方法1:
修改my.cnf

[mysqld]
max_allowed_packet = 100M

修改方法2:

mysql> set global max_allowed_packet = 100 * 1024 * 1024;

临时修改,mysql重启后失效

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容