關于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循環(huán)插入
在往mysql插入少量數據的時候,我們一般用for循環(huán)?
$arr
= [
[
'name'
=>
'testname1'
,
'age'
=> 18,
],
[
'name'
=>
'testname2'
,
'age'
=> 19,
],
[
'name'
=>
'testname3'
,
'age'
=> 18,
],
];
$servername
=
"localhost"
;
$port
= 3306;
$username
=
"username"
;
$password
=
"password"
;
$dbname
=
"mytestdb"
;
// 創(chuàng)建連接
$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循環(huán)的辦法插入是沒有問題的,只是時間會比較長。
對比一下插入少量數據與插入大量數據,使用上面的for循環(huán)插入耗費的時間:
條數 | 時間 (單位:秒) |
---|---|
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"
;
// 創(chuàng)建連接
$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循環(huán)插入節(jié)約了很多時間
條數 | 時間 (單位:秒) |
---|---|
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系統(tǒng)服務器安裝MySQL8.0.13遇到的問題及解決方法
文章主要介紹了Win10系統(tǒng)安裝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配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下...