Heim > Datenbank > MySQL-Tutorial > Hauptteil

So fügen Sie Daten stapelweise in MySQL ein

coldplay.xixi
Freigeben: 2023-01-04 09:37:18
Original
34034 Leute haben es durchsucht

MySQL-Batch-Einfügemethode: 1. Schleifeneinfügung, Syntaxformat „for($i=1;$i<=condition;$i++){//insert Statement}“ 2. Reduzieren Sie Verbindungsressourcen und verbinden Sie eine SQL; 3. Verwenden Sie gespeicherte Prozeduren. 4. Verwenden Sie „MYSQL LOCAL_INFILE“.

So fügen Sie Daten stapelweise in MySQL ein

Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL-Version 8.0.22, Thinkpad T480-Computer.

MySQL-Methode zum Batch-Einfügen von Daten:

Methode 1: Schleifeneinfügung

Dies ist auch die gebräuchlichste Methode, wenn die Datenmenge nicht sehr groß ist, kann sie verwendet werden, verbraucht jedoch Ressourcen jedes Mal eine Verbindung zur Datenbank herzustellen.

Die allgemeine Idee ist wie folgt

(Ich schreibe hier Pseudocode, das spezifische Schreiben kann mit Ihrer eigenen Geschäftslogik oder Framework-Syntax kombiniert werden)

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++
}
Nach dem Login kopieren

Weil es zu häufig und nicht schwierig zugleich ist, und es ist nicht das, was ich heute hauptsächlich schreibe, deshalb werde ich es hier nicht schreiben. Erzähl mir mehr

Methode 2: Verbindungsressourcen reduzieren und eine SQL verbinden

Der Pseudocode lautet wie folgt

//这里假设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
Nach dem Login kopieren

So geschrieben ist es Normalerweise ist es kein großes Problem, 10.000 Artikel einzufügen, es sei denn, die Daten sind sehr lang. Zum Beispiel: Stapelgenerierung von Kartennummern, Stapelgenerierung von Zufallscodes usw.

Methode 3: Gespeicherte Prozeduren verwenden

Ich verwende dies zufällig wieder und bezahle einfach die SQL. Sie können die spezifische Geschäftslogik selbst kombinieren.

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();
Nach dem Login kopieren

Dies ist nur ein Testcode.

Ich füge 80.000 Elemente gleichzeitig ein, aber die Datenmenge in jedem Stück ist sehr groß und Textfelder

Es dauert 6,524 s

Methode 4: Verwenden Sie MYSQL LOCAL_INFILE

Ich verwende dies derzeit, also kopiere ich übrigens auch den PDO-Code als Referenz

//设置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);
  }
}
Nach dem Login kopieren

Weitere verwandte kostenlose Lerninhalte Empfehlungen:MySQL-Tutorial (Video)

Das obige ist der detaillierte Inhalt vonSo fügen Sie Daten stapelweise in MySQL ein. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage