Mysql 일괄 데이터 삽입 방법: 1. 루프 삽입, 구문 형식 "for($i=1;$i
이 튜토리얼의 운영 환경: windows7 시스템, mysql 버전 8.0.22, thinkpad t480 컴퓨터.
Mysql 일괄 데이터 삽입 방법:
방법 1: 루프 삽입
가장 일반적인 방법이기도 하며, 데이터 양이 많지 않은 경우 사용할 수 있지만 리소스가 소모됩니다. 매번 데이터베이스에 연결하는 것입니다.
일반적인 아이디어는 다음과 같습니다
(여기에 의사 코드를 작성합니다. 구체적인 작성은 자신의 비즈니스 로직이나 프레임워크 구문과 결합될 수 있습니다.)
for($i=1;$i<=100;$i++){ $sql = 'insert...............'; //querysql } foreach($arr as $key => $value){ $sql = 'insert...............'; //querysql } while($i <= 100){ $sql = 'insert...............'; //querysql $i++ }
너무 일반적이고 동시에 어렵지 않기 때문에 오늘은 주로 쓰는 내용이 아니어서 여기서는 쓰지 않겠습니다. 더 알려주세요
방법 2: 연결 자원을 줄이고 SQL을 스플라이스
의사 코드는 다음과 같습니다
//这里假设arr的key和数据库字段同步,其实大多数框架中在php操作数据库的时候都是这么设计的 $arr_keys = array_keys($arr); $sql = 'INSERT INTO tablename (' . implode(',' ,$arr_keys) . ') values'; $arr_values = array_values($arr); $sql .= " ('" . implode("','" ,$arr_values) . "'),"; $sql = substr($sql ,0 ,-1); //拼接之后大概就是 INSERT INTO tablename ('username','password') values ('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx'),('xxx','xxx') ....... //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 = 'hs96.cn@gmail.com'; $ip = 'hs96.cn@gmail.com'; $user = 'hs96.cn@gmail.com'; $pwd = 'hs96.cn@gmail.com'; $dsn = 'mysql:dbname=' . $dbname . ';host=' . $ip . ';port=3306'; $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"] . '/'; $my_file = $root_dir . "hs96.cn@gmail.com/sql_cache/" . $order['OrderNo'] . '.sql'; $fhandler = fopen($my_file,'a+'); if ($fhandler) { $sql = implode("\t" ,$arr); $i = 1; while ($i <= 80000) { $i++; fwrite($fhandler ,$sql . "\r\n"); } $sql = "LOAD DATA local INFILE '" . $myFile . "' INTO TABLE "; $sql .= "tablename (" . implode(',' ,$arr_keys) . ")"; $pdo = $this->pdo_local_info (); $res = $pdo->exec($sql); if (!$res) { //TODO 插入失败 } @unlink($my_file); } }
관련 무료 학습 권장 사항:mysql 튜토리얼 (동영상)
위 내용은 mysql에 데이터를 일괄 삽입하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!