6

MySQL - LOAD DATA LOCAL INFILE を使用して、CSV ファイルの最初の 10 行のみをアップロードすることは可能ですか? LIMIT を使用してみましたが、機能しません。

これが私のPHPスクリプトです:

    $sql = "LOAD DATA LOCAL INFILE '".@mysql_escape_string($this->file_name).
         "' INTO TABLE branches
              FIELDS TERMINATED BY ',' ENCLOSED BY '\"'
              LINES TERMINATED BY '\r\n'
              IGNORE 1 LINES                  
              (
                Name,
                Address_Line_1, 
                City, 
                State, 
                Country_Code,
                Postal_Code, 
                Main_Phone, 
                Google_Places_Link, 
                Custom_Directory_1, 
                Custom_Directory_2, 
                Custom_Directory_3,  
                business_id,
                username
              ) SET branches.business_id=(".$this->business_id."), branches.username=('".$this->username."') LIMIT 0,10  
              ";
4

2 に答える 2

1

以下のソリューションは、 の LIMIT スタイルの動作を提供しますLOAD DATA INFILE。合計行を使用IGNORE n LINESして設定します-テストしたい小さな数です。

これは、ファイル スキャンを保存せず、洗練されておらず、(文字通り) 逆方向に動作します。しかし、100 万行未満の中程度の長さのテーブルの場合、私にとってはテストに役立ちます。(はるかに大きなテーブルではうまくいくかもしれませんが、私はそれをテストする機会がありませんでした。)

たとえば、101,773 行の大きなテーブルの最後の 20 行は次のようになります。

LOAD DATA INFILE 'c:/temp/input/datafile.csv'
    -- IGNORE
    INTO TABLE `mytable`
    
    CHARACTER SET utf8mb4
    FIELDS  TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '\b'
    LINES TERMINATED BY '\r\n'
    IGNORE 101753 LINES
于 2021-03-21T23:25:02.133 に答える