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