Heim > Artikel > Backend-Entwicklung > PHP implementiert das Batch-Einfügen von Daten in MySQL
Jetzt gibt es eine solche Tabelle. Wie können wir 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
Beim Einfügen einer kleinen Datenmenge in MySQL verwenden wir normalerweise die for-Schleife
(Verwandte Video-Tutorial-Freigabe: php-Video-Tutorial)
$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 große Datenmengen stapelweise einfügen möchten, ist es kein Problem, wenn Sie zum Einfügen auch eine for-Schleife verwenden. aber es wird länger dauern. Vergleichen Sie das Einfügen einer kleinen Datenmenge mit dem Einfügen einer großen Datenmenge. Die Zeit, die zum Einfügen mithilfe der obigen for-Schleife benötigt wird: Zeit für die Anzahl der Elemente (Einheit: Sekunden)
Methode 2. Verwenden Sie die Insert-Anweisung zum Zusammenführen. Einfügen
In MySQL können Sie die Insert-Anweisung zum Zusammenführen von Einfügungen verwenden, z. B.
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();
Schauen wir uns den Zeitvergleich zwischen einer kleinen Menge an von Daten und einer großen Datenmenge. Aus der Gesamtzeit ist ersichtlich, dass das Einfügen einer Zusammenführung im Vergleich zum Einfügen einer For-Schleife gerade viel Zeit spart, und der Effekt ist offensichtlich
Wenn Sie der Meinung sind, dass das Array zu groß ist und Sie das Risiko von SQL-Fehlern verringern möchten, können Sie auch array_chunk verwenden, um das Array in Blöcke einer bestimmten Größe zu schneiden und dann jeden Block zusammenzuführen und einzufügen .
Empfohlene verwandte Artikel und Tutorials:PHP-Tutorial
Das obige ist der detaillierte Inhalt vonPHP implementiert das Batch-Einfügen von Daten in MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!