>  기사  >  백엔드 개발  >  PHP는 데이터를 일괄적으로 mysql에 삽입합니다(코드 예).

PHP는 데이터를 일괄적으로 mysql에 삽입합니다(코드 예).

藏色散人
藏色散人앞으로
2020-01-31 19:18:103566검색

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 루프를 사용하는 경우가 있는데

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

많은 양의 데이터를 일괄적으로 삽입하고 싶을 때 for 루프도 함께 사용하면 문제는 없지만 시간이 더 오래 걸립니다. 적은 양의 데이터를 삽입하는 것과 대량의 데이터를 삽입하는 것을 비교하면 위의 for 루프를 사용하여 삽입하는 데 걸리는 시간: 항목 수 시간(단위: 초)

PHP는 데이터를 일괄적으로 mysql에 삽입합니다(코드 예).

방법 2. 사용 insert 문을 사용하여 inserts

mysql

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

와 같이 insert 문을 사용하여 병합, 삽입을 할 수 있습니다. 적은 양의 데이터와 대용량 데이터의 시간 비교를 살펴보겠습니다. 전체적으로 보면 insert merge 삽입이 지금의 for 루프 삽입에 비해 시간이 많이 절약되고 효과도 확연히 나타납니다.

배열이 너무 크다고 생각된다면 SQL 오류의 위험을 줄이고 싶다면 array_chunk를 사용하여 배열을 지정된 크기의 청크로 자른 다음 각 청크를 병합하고 삽입할 수도 있습니다. 더 많은 PHP 관련 지식을 보려면

php 튜토리얼

을 방문하세요! PHP는 데이터를 일괄적으로 mysql에 삽입합니다(코드 예).

위 내용은 PHP는 데이터를 일괄적으로 mysql에 삽입합니다(코드 예).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제