Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Batch-Einfügung von Daten in die MySQL-Datenbank mit PHP

Wird eine for-Schleife verwendet?

Aber die schnellste Möglichkeit, Daten in MySQL zu laden, ist die Verwendung von DATEN INFILE LADEN Befehl können Sie die Datei zum Laden über PHP erstellen und sie dann über einen anderen Prozess (oder als letzten Schritt im ursprünglichen Prozess) an MySQL übergeben.

Wenn Sie eine Datei nicht verwenden können, verwenden Sie die folgende Syntax:

insert into table(col1, col2) VALUES (val1,val2), (val3,val4), (val5, val6)

so reduzieren Sie die Gesamtzahl der auszuführenden Sätze.

BEARBEITEN:Angesichts Ihres Ausschnitts scheint es, dass Sie vom INSERT ... ON profitieren können AKTUALISIERUNG DES DOPPELTEN SCHLÜSSELS Syntax von MySQL, die Datenbank die Arbeit erledigen lässt und die Anzahl der Abfragen reduziert. Dies setzt voraus, dass Ihre Tabelle einen Primärschlüssel oder einen eindeutigen Index hat.

Um die Datenbank alle 100 Zeilen zu treffen, können Sie so etwas tun (BITTE ÜBERPRÜFEN UND IN IHRER UMGEBUNG BEHEBEN )

$insertOrUpdateStatement1 = "INSERT INTO table (col1, col2) VALUES ";
$insertOrUpdateStatement2 = "ON DUPLICATE KEY UPDATE ";
$counter = 0;
$queries = array();

foreach($itemList as $key => $item){
    $val1 = escape($item->col1); //escape is a function that will make 
                                 //the input safe from SQL injection. 
                                 //Depends on how are you accessing the DB

    $val2 = escape($item->col2);

    $queries[] = $insertOrUpdateStatement1. 
    "('$val1','$val2')".$insertOrUpdateStatement2.
    "col1 = '$val1', col2 = '$val2'";

    $counter++;

    if ($counter % 100 == 0) {
        executeQueries($queries);
        $queries = array();
        $counter = 0;
    }
}

Und executeQueries würde das Array greifen und eine einzelne Mehrfachabfrage senden:

function executeQueries($queries) {
   $data = "";
     foreach ($queries as $query) {
        $data.=$query.";\n";
    }
    executeQuery($data);
}