Heim  >  Artikel  >  Backend-Entwicklung  >  PHP fügt Daten stapelweise in MySQL ein (Codebeispiel)

PHP fügt Daten stapelweise in MySQL ein (Codebeispiel)

藏色散人
藏色散人nach vorne
2020-01-31 19:18:103478Durchsuche

PHP fügt Daten stapelweise in MySQL ein (Codebeispiel)

Angenommen, ich habe eine solche Tabelle und möchte eine große Datenmenge in diese Tabelle einfügen

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

Batch-Einfügung

Methode 1. Verwenden Sie die for-Schleife zum Einfügen

Wenn Sie eine kleine Datenmenge in MySQL einfügen, verwenden wir normalerweise die for-Schleife

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

Wenn Sie eine große Datenmenge stapelweise einfügen möchten, ist es kein Problem, wenn Sie zum Einfügen auch eine for-Schleife verwenden, aber es dauert länger. Vergleichen Sie das Einfügen einer kleinen Datenmenge mit dem Einfügen einer großen Datenmenge, indem Sie die obige for-Schleife verwenden, um die benötigte Zeit einzufügen: Häufigkeit (Einheit: Sekunden)

PHP fügt Daten stapelweise in MySQL ein (Codebeispiel)

Methode 2: Verwenden Sie die Insert-Anweisung zum Zusammenführen und Einfügen

In MySQL können Sie die Insert-Anweisung zum Zusammenführen und Einfügen verwenden, z as

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

Werfen wir einen Blick auf den Zeitvergleich zwischen einer kleinen Datenmenge und einer großen Datenmenge. Aus der Gesamtzeit ist ersichtlich, dass das Einfügen von Merge-Einfügungen im Vergleich zum aktuellen For-Schleifen-Einfügen viel Zeit spart, und der Effekt ist offensichtlich

PHP fügt Daten stapelweise in MySQL ein (Codebeispiel)

Wenn Sie der Meinung sind, dass das Array zu groß ist und Sie das Risiko von SQL-Fehlern verringern möchten, können Sie dies tun Verwenden Sie auch array_chunk, um das Array in Blöcke einer bestimmten Größe zu schneiden, und führen Sie dann für jeden Block eine Einfügezusammenführung durch.

Weitere PHP-bezogene Kenntnisse finden Sie im

PHP-Tutorial

!

Das obige ist der detaillierte Inhalt vonPHP fügt Daten stapelweise in MySQL ein (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:cnblogs.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen