PHP は、mysql へのデータのバッチ挿入を実装します。

王林
リリース: 2023-04-08 11:58:02
転載
4286 人が閲覧しました

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='用户信息表';
ログイン後にコピー

バッチ挿入

方法 1. for ループを使用して挿入

少量のデータを mysql に挿入する場合、通常は for ループを使用します

(関連ビデオチュートリアル共有: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 . "
" . $conn->error; } } $costEnd = microtime(true); $cost = round($costEnd - $costBegin, 3); var_dump($cost); $conn->close();
ログイン後にコピー

大量のデータを一括で挿入したい場合は、for ループを使用して挿入しても問題ありません。しかし、もっと時間がかかります。少量のデータを挿入する場合と大量のデータを挿入する場合を比較してください。上記の for ループを使用して挿入するのにかかる時間: アイテム数時間 (単位: 秒)

PHP は、mysql へのデータのバッチ挿入を実装します。

方法 2. insert ステートメントを使用してマージする 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"; // 创建连接 $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 . "
" . $conn->error; } } $costEnd = microtime(true); $cost = round($costEnd - $costBegin, 3); var_dump($cost); $conn->close();
ログイン後にコピー

間の時間の比較を見てみましょう。少量のデータと大量のデータ。全体の時間を見ると、先ほどの for ループの挿入に比べて、挿入マージ挿入の方が大幅に時間が節約されており、その効果が非常に明らかであることがわかります。

#配列が大きすぎる場合、SQL エラーのリスクを軽減したい場合は、array_chunk を使用して配列を指定したサイズのブロックに分割し、それぞれをマージして挿入することもできます。ブロック。PHP は、mysql へのデータのバッチ挿入を実装します。

おすすめの関連記事とチュートリアル:

php チュートリアル

以上がPHP は、mysql へのデータのバッチ挿入を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!