MySQL의 일괄 데이터 입력 방법: 1. 루프 삽입을 사용합니다. 2. 연결 리소스를 줄이고 SQL 문을 연결합니다. 3. 저장 프로시저를 사용합니다. 4. [MYSQL LOCAL_INFILE]을 사용합니다.
이 튜토리얼의 운영 환경: Windows 7 시스템, mysql 버전 8.0.22, DELL G3 컴퓨터 이 방법은 모든 브랜드의 컴퓨터에 적합합니다.
관련 무료 학습 권장사항: mysql 비디오 튜토리얼
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); } }
이것도 양이 많습니다 각 조각에는 많은 데이터가 있고 varchar4000 및 텍스트 필드가 많습니다
2.160초가 걸립니다
위는 기본 요구 사항을 충족합니다. 1백만 개의 데이터는 큰 문제가 아닙니다. 그렇지 않으면 데이터가 너무 커서 하위 데이터베이스와 테이블이 포함됩니다. , 또는 큐를 사용하여 삽입됩니다.
위 내용은 mysql에서 일괄적으로 데이터를 입력하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!