php往mysql中批量插入数据实例教程


Posted in PHP onDecember 12, 2018

前言

假如说我有这样一个表,我想往这个表里面插入大量数据

CREATE TABLE IF NOT EXISTS `user_info` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主键',
 `name` varchar(255) NOT NULL default '' COMMENT '姓名',
 `age` int(11) NOT NULL default '0' COMMENT '年龄',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='用户信息表';

批量插入

方法一、使用for循环插入

在往mysql插入少量数据的时候,我们一般用for循环

$arr = [	
	[
		'name' => 'testname1',
		'age' => 18,
	],
	[
		'name' => 'testname2',
		'age' => 19,
	],
	[
		'name' => 'testname3',
		'age' => 18,
	],
];

$servername = "localhost";
$port = 3306;
$username = "username";
$password = "password";
$dbname = "mytestdb";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname, $port);

// 检测连接
if ($conn->connect_error) {
 die("connect failed: " . $conn->connect_error);
} 

$costBegin = microtime(true);

foreach($arr as $item) {
 	$sql = sprintf("INSERT INTO user_info (name, age) VALUES ( '%s', %d);", $item['name'], (int)$item['age']);	 
	if ($conn->query($sql) === TRUE) {
	 echo "insert success";
	} else {
	 echo "Error: " . $sql . "<br>" . $conn->error;
	}
}

$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
var_dump($cost);

$conn->close();

假如说要批量插入大量数据,如果还用for循环的办法插入是没有问题的,只是时间会比较长。

对比一下插入少量数据与插入大量数据,使用上面的for循环插入耗费的时间:

条数 时间 (单位:秒)
10 0.011
1000 0.585
10000 5.733
100000 60.587

方法二、使用insert语句合并插入

mysql里面是可以使用insert语句进行合并插入的,比如

INSERT INTO user_info (name, age) VALUES ('name1', 18), ('name2', 19);表示一次插入两条数据

下面看示例代码,看看不同数据条数下

$arr = [	
	[
		'name' => 'testname1',
		'age' => 18,
	],
	[
		'name' => 'testname2',
		'age' => 19,
	],
	[
		'name' => 'testname3',
		'age' => 18,
	],
	// 此处省略
	……
	……
];

$servername = "localhost";
$port = 3306;
$username = "username";
$password = "password";
$dbname = "mytestdb";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname, $port);

// 检测连接
if ($conn->connect_error) {
 die("connect failed: " . $conn->connect_error);
} 

$costBegin = microtime(true);

if (!empty($arr)) {
	$sql = sprintf("INSERT INTO user_info (name, age) VALUES ");

	foreach($arr as $item) {
  $itemStr = '( ';
  $itemStr .= sprintf("'%s', %d", $item['name'], (int)$item['age']);
  $itemStr .= '),';
  $sql .= $itemStr;
  }

 // 去除最后一个逗号,并且加上结束分号
 $sql = rtrim($sql, ',');
 $sql .= ';';

	if ($conn->query($sql) === TRUE) {
	} else {
	 echo "Error: " . $sql . "<br>" . $conn->error;
	}
}

$costEnd = microtime(true);
$cost = round($costEnd - $costBegin, 3);
var_dump($cost);

$conn->close();

下面看一下少量数据与大量数据的时间对比。从总体时间上,可以看出insert合并插入比刚才for循环插入节约了很多时间

条数 时间 (单位:秒)
10 0.006
1000 0.025
10000 0.131
100000 1.23

当然,如果你觉得数组太大,想要减少sql错误的风险,也可以使用array_chunk将数组切成指定大小的块,然后对每个块进行insert合并插入

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
php循环输出数据库内容的代码
May 24 PHP
php Try Catch异常测试
Mar 01 PHP
php 删除记录实现代码
Mar 12 PHP
PHP 提取图片img标记中的任意属性的简单实例
Dec 10 PHP
php object转数组示例
Jan 15 PHP
php连接odbc数据源并保存与查询数据的方法
Dec 24 PHP
php支付宝手机网页支付类实例
Mar 04 PHP
php身份证号码检查类实例
Jun 18 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 PHP
浅谈mysql_query()函数的返回值问题
Sep 05 PHP
php实现留言板功能
Mar 05 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
Mar 29 PHP
yii2 url重写并隐藏index.php方法
Dec 10 #PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 #PHP
php高清晰度无损图片压缩功能的实现代码
Dec 09 #PHP
PHP聊天室简单实现方法详解
Dec 08 #PHP
PHP文件操作实例总结【文件上传、下载、分页】
Dec 08 #PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 #PHP
Laravel框架定时任务2种实现方式示例
Dec 08 #PHP
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
php 高效率写法 推荐
2010/02/21 PHP
PHP解压tar.gz格式文件的方法
2016/02/14 PHP
PHP使用文件锁解决高并发问题示例
2018/03/29 PHP
Firefox getBoxObjectFor getBoundingClientRect联系
2008/10/26 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
javascript数字时钟示例分享
2014/04/23 Javascript
javascript中Math.random()使用详解
2015/04/15 Javascript
简介alert()与console.log()的不同
2015/08/26 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
浅谈Vue.js
2017/03/02 Javascript
javascript+jQuery实现360开机时间显示效果
2017/11/03 jQuery
jQuery中的for循环var与let的区别
2018/04/21 jQuery
JavaScript 中 JSON.parse 函数 和 JSON.stringify 函数
2018/12/05 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python通过正则查找微博@(at)用户的方法
2015/03/13 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
人工神经网络算法知识点总结
2019/06/11 Python
Django密码系统实现过程详解
2019/07/19 Python
python并发爬虫实用工具tomorrow实用解析
2019/09/25 Python
如何让python的运行速度得到提升
2020/07/08 Python
pandas针对excel处理的实现
2021/01/15 Python
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
英国剑桥包官网:The Cambridge Satchel Company
2016/08/01 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
JSF界面控制层技术
2013/06/17 面试题
英语专业大学生求职简历的自我评价
2013/10/18 职场文书
暑期社会实践方案
2014/02/05 职场文书
12月红领巾广播稿
2014/02/13 职场文书
标准化管理实施方案
2014/02/25 职场文书
项目投资合作意向书
2014/07/29 职场文书
2014年团支书工作总结
2014/11/14 职场文书
寻找最美乡村教师观后感
2015/06/18 职场文书