Maison  >  Article  >  développement back-end  >  PHP implémente l'insertion par lots de données dans MySQL

PHP implémente l'insertion par lots de données dans MySQL

王林
王林avant
2020-01-31 21:46:484342parcourir

PHP implémente l'insertion par lots de données dans MySQL

Maintenant, il existe un tel tableau. Comment pouvons-nous insérer une grande quantité de données dans ce tableau ?

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='用户信息表';

Insertion par lots

Méthode 1. Utiliser la boucle for pour insérer

Lors de l'insertion d'une petite quantité de données dans MySQL, nous utilisons généralement la boucle for

(Partage de tutoriel vidéo associé : tutoriel vidéo php)

$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();

Si vous souhaitez insérer une grande quantité de données par lots, il n'y a pas de problème si vous utilisez également une boucle for pour insérer, mais cela prendra plus de temps. Comparez l'insertion d'une petite quantité de données avec l'insertion d'une grande quantité de données, le temps nécessaire à l'insertion à l'aide de la boucle for ci-dessus : Nombre d'éléments, temps (unité : secondes)

PHP implémente linsertion par lots de données dans MySQL

Méthode 2. Utilisez l'instruction insert pour fusionner Insert

Dans MySQL, vous pouvez utiliser l'instruction insert pour l'insertion par fusion, telle que

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

$arr = [ 
[
&#39;name&#39; => &#39;testname1&#39;,
&#39;age&#39; => 18,
],
[
&#39;name&#39; => &#39;testname2&#39;,
&#39;age&#39; => 19,
],
[
&#39;name&#39; => &#39;testname3&#39;,
&#39;age&#39; => 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 = &#39;( &#39;;
$itemStr .= sprintf("&#39;%s&#39;, %d", $item[&#39;name&#39;], (int)$item[&#39;age&#39;]);
$itemStr .= &#39;),&#39;;
$sql .= $itemStr;
}

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

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();

Jetons un coup d'œil à la comparaison temporelle entre une petite quantité de données et une grande quantité de données. D'après le temps global, on peut voir que l'insertion par fusion par insertion fait gagner beaucoup de temps par rapport à l'insertion de la boucle for à l'instant, et l'effet est évident Nombre d'éléments (unité : secondes)

PHP implémente linsertion par lots de données dans MySQL.

Si vous pensez que le tableau est trop grand, si vous souhaitez réduire le risque d'erreurs SQL, vous pouvez également utiliser array_chunk pour couper le tableau en blocs d'une taille spécifiée, puis fusionner et insérer chaque bloc. .

Articles et tutoriels connexes recommandés : Tutoriel php

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer