> 데이터 베이스 > MySQL 튜토리얼 > mysql에 데이터를 일괄 삽입하는 방법

mysql에 데이터를 일괄 삽입하는 방법

coldplay.xixi
풀어 주다: 2023-01-04 09:37:18
원래의
34075명이 탐색했습니다.

Mysql 일괄 데이터 삽입 방법: 1. 루프 삽입, 구문 형식 "for($i=1;$i

mysql에 데이터를 일괄 삽입하는 방법

이 튜토리얼의 운영 환경: windows7 시스템, mysql 버전 8.0.22, thinkpad t480 컴퓨터.

Mysql 일괄 데이터 삽입 방법:

방법 1: 루프 삽입

가장 일반적인 방법이기도 하며, 데이터 양이 많지 않은 경우 사용할 수 있지만 리소스가 소모됩니다. 매번 데이터베이스에 연결하는 것입니다.

일반적인 아이디어는 다음과 같습니다

(여기에 의사 코드를 작성합니다. 구체적인 작성은 자신의 비즈니스 로직이나 프레임워크 구문과 결합될 수 있습니다.)

for($i=1;$i<=100;$i++){
$sql = &#39;insert...............&#39;;
//querysql
}
foreach($arr as $key => $value){
$sql = &#39;insert...............&#39;;
//querysql
}
while($i <= 100){
$sql = &#39;insert...............&#39;;
//querysql
$i++
}
로그인 후 복사

너무 일반적이고 동시에 어렵지 않기 때문에 오늘은 주로 쓰는 내용이 아니어서 여기서는 쓰지 않겠습니다. 더 알려주세요

방법 2: 연결 자원을 줄이고 SQL을 스플라이스

의사 코드는 다음과 같습니다

//这里假设arr的key和数据库字段同步,其实大多数框架中在php操作数据库的时候都是这么设计的
$arr_keys        = array_keys($arr);
$sql             = &#39;INSERT INTO tablename (&#39; . implode(&#39;,&#39; ,$arr_keys) . &#39;) values&#39;;
$arr_values      = array_values($arr);
$sql             .= " (&#39;" . implode("&#39;,&#39;" ,$arr_values) . "&#39;),";
$sql             = substr($sql ,0 ,-1);
//拼接之后大概就是  INSERT INTO tablename (&#39;username&#39;,&#39;password&#39;) values 
(&#39;xxx&#39;,&#39;xxx&#39;),(&#39;xxx&#39;,&#39;xxx&#39;),(&#39;xxx&#39;,&#39;xxx&#39;),(&#39;xxx&#39;,&#39;xxx&#39;),(&#39;xxx&#39;,&#39;xxx&#39;),(&#39;xxx&#39;,&#39;xxx&#39;)
.......
//querysql
로그인 후 복사

이렇게 작성합니다. 일반적으로 10,000개의 항목을 삽입하는 데에는 큰 문제가 없습니다. 데이터가 매우 길지 않는 한 일반적인 일괄 삽입(예: 카드 번호 일괄 생성, 무작위 코드 일괄 생성 등)을 처리하는 데 충분합니다.

방법 3: 저장 프로시저 사용

우연히 이것을 다시 사용하고 SQL만 지불하면 됩니다. 특정 비즈니스 로직을 직접 결합할 수 있습니다.

delimiter $$$
create procedure zqtest()
begin
declare i int default 0;
set i=0;
start transaction;
while i<80000 do
//your insert sql 
set i=i+1;
end while;
commit;
end
$$$
delimiter;
call zqtest();
로그인 후 복사

이것은 테스트 코드일 뿐입니다. 특정 매개변수를 직접 정의할 수 있습니다.

한 번에 80,000개의 항목을 삽입하고 있지만, 각 조각의 데이터 양은 매우 많습니다. 및 텍스트 필드

6.524초가 소요됩니다

방법 4: MYSQL LOCAL_INFILE 사용

현재 이것을 사용하고 있으므로 참고용으로 pdo 코드도 복사합니다

//设置pdo开启MYSQL_ATTR_LOCAL_INFILE
/*hs96.cn@gmail.com
public function pdo_local_info ()
{
     global $system_dbserver;
     $dbname  = &#39;hs96.cn@gmail.com&#39;;
     $ip      = &#39;hs96.cn@gmail.com&#39;;
     $user    = &#39;hs96.cn@gmail.com&#39;;
     $pwd     = &#39;hs96.cn@gmail.com&#39;;
     $dsn     = &#39;mysql:dbname=&#39; . $dbname . &#39;;host=&#39; . $ip . &#39;;port=3306&#39;;
     $options = [PDO::MYSQL_ATTR_LOCAL_INFILE => true];
     $db      = new PDO($dsn ,$user ,$pwd ,$options);
     return $db;
 }
//伪代码如下
public function test(){
     $arr_keys         = array_keys($arr);
$root_dir         = $_SERVER["DOCUMENT_ROOT"] . &#39;/&#39;;
$my_file          = $root_dir . "hs96.cn@gmail.com/sql_cache/" . $order[&#39;OrderNo&#39;] . &#39;.sql&#39;;
$fhandler         = fopen($my_file,&#39;a+&#39;);
if ($fhandler) {
    $sql = implode("\t" ,$arr);
      $i   = 1;
      while ($i <= 80000)
      {
          $i++;
          fwrite($fhandler ,$sql . "\r\n");
      }
      $sql = "LOAD DATA local INFILE &#39;" . $myFile . "&#39; INTO TABLE ";
      $sql .= "tablename (" . implode(&#39;,&#39; ,$arr_keys) . ")";
      $pdo = $this->pdo_local_info ();
      $res = $pdo->exec($sql);
      if (!$res) {
           //TODO 插入失败
      }
      @unlink($my_file);
  }
}
로그인 후 복사

관련 무료 학습 권장 사항:mysql 튜토리얼 (동영상)

위 내용은 mysql에 데이터를 일괄 삽입하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿