sql >> データベース >  >> RDS >> Mysql

PHPを使用したMySQLデータベースへのデータのバッチ挿入

    forループを使用していますか?

    ただし、MySQLにデータをロードする最も簡単なオプションは、を使用することです。データファイルの読み込み コマンドを使用すると、PHPを介してロードするファイルを作成し、別のプロセスを介して(または、元のプロセスの最終ステップとして)MySQLにフィードできます。

    ファイルを使用できない場合は、次の構文を使用してください。

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

    したがって、実行する文の総数を減らすことができます。

    編集:スニペットを考えると、 INSERT...ONの恩恵を受けることができるようです。キーの更新を複製する MySQLの構文。データベースに作業を任せ、クエリの量を減らします。これは、テーブルに主キーまたは一意のインデックスがあることを前提としています。

    100行ごとにDBをヒットするには、次のような操作を実行できます(確認して、環境に合わせて修正してください

    $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;
        }
    }
    

    そしてexecuteQueriesは配列を取得し、単一の複数のクエリを送信します:

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


    1. C#をPostgresに接続するにはどうすればよいですか?

    2. onclickボタンでデータベース情報を更新

    3. 動的(列ベース)間隔

    4. プロセスの終了とキャンセルの違い