关于PHP往mysql数据库中批量插入数据实例教程
文章主要给大家介绍了关于php往mysql中批量插入数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧...
文章主要给大家介绍了关于php往MySQL中批量插入数据的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
前言
假如说我有这样一个表,我想往这个表里面插入大量数据?
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合并插入
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值。
-
MyBatis SQL数据库xml处理小于号与大于号正确的格式
文章主要介绍了MyBatis SQL xml处理小于号与大于号正确的格式,需要的朋友可以参考下 当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序错误。...
-
SQL Server数据库中分页编号的另一种方式
文章主要介绍了SQL Server 分页编号的另一种方式,需要的朋友可以参考下今天看书讲T-SQL,看到了UNBOUNDED PRECEDING,就想比对下ROW_NUMBER()的运行速度。...
-
SQL数据库中Truncate的用法
runcate是一个能够快速清空资料表内所有资料的SQL语法。这篇文章主要介绍了SQL中Truncate的用法,需要的朋友可以参考下...
-
Sql Server数据库的一些知识点定义和总结
文章主要给大家总结介绍了关于Sql Server的一些知识点定义文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习...
-
Win10系统服务器安装MySQL8.0.13遇到的问题及解决方法
文章主要介绍了Win10系统安装MySQL8.0.13遇到的问题及解决方法,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...
-
Php两点地理坐标距离的计算方法和具体代码
文章主要为大家详细介绍了php两点地理坐标距离的计算方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下php计算两点地理坐标距离的具体代码,具体内容如下功能:根据圆周率和...
-
PHP获取HTTP body内容的方法
今天小编就为大家分享一篇PHP获取HTTP body内容的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧有时候我们获取数据时需要根据Header中的格式来解析,比...
-
PHP面向对象程序设计中获取对象属性的3种方法实例分析
文章主要介绍了PHP获取对象属性的三种方法,结合实例形式分析了php面向对象程序设计中获取对象属性的常见操作技巧,需要的朋友可以参考下。PHP获取对象属性的三种方法,具体如下...
-
php5.5新增的yield关键字功能与相关使用技巧
文章主要介绍了PHP yield关键字功能与用法,结合实例形式分析了php5.5新增的yield关键字功能与相关使用技巧,需要的朋友可以参考下实例讲述PHP yield关键字功能与用法具体如下:y...
-
Windows7下IIS+php配置教程详细介绍
文章主要为大家详细介绍了Windows7下IIS+php配置教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...