MYSQLは、LOAD DATAINFILEを使用してcsvからデータをインポートします

2013年01月03日に質問されました。  ·  閲覧回数 415.3k回  ·  ソース

MANJEET picture
2013年01月03日

CSVファイルからMysqlに20000行のデータをインポートしています。

CSVの列は、MySQLテーブルの列とは異なる順序になっています。 Mysqlテーブルの列に対応する列を自動的に割り当てる方法は?

実行すると

LOAD DATA INFILE'abc.csv' INTO TABLE abc

このクエリは、すべてのデータを最初の列に追加します。

Mysqlにデータをインポートするための自動構文を提案してください。

回答

Saharsh Shah picture
2013年01月03日
177

LOAD DATA INFILEコマンドを使用して、 csvファイルをテーブルにインポート

このリンクを確認してくださいMySQL-LOADDATAINFILE

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

MySQL 8.0ユーザーの場合:

LOCALキーワードを使用すると、セキュリティリスクが発生します。MySQL8.0以降、 LOCAL機能はデフォルトでFalseに設定されています。 エラーが表示される場合があります。

エラー1148:使用されているコマンドはこのMySQLバージョンでは許可されていません

ドキュメントの指示に従って上書きできます。 このような上書きはセキュリティの問題を解決するのではなく、リスクを認識して進んでいることを認めるだけであることに注意してください。

ckim picture
2013年01月03日
51

おそらく、 FIELDS TERMINATED BY ','または区切り文字が何であれ設定する必要があります。

CSVファイルの場合、ステートメントは次のようになります。

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
Sunny S.M picture
2015年09月16日
51

ファイルをインポートする前に、以下を準備する必要があります。

  • ファイルのデータがインポートされるデータベーステーブル。
  • テーブルの列数および各列のデータのタイプと一致するデータを含むCSVファイル。
  • MySQLデータベースサーバーに接続するアカウントには、FILEおよびINSERT特権があります。

次の表があるとします。

enter image description here

次のクエリを使用してテーブルを作成します。

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);

CSVファイルは、たとえば次の添付画像を参照するために適切にフォーマットする必要があります。

enter image description here

すべて問題がなければ..CSVファイルからデータをロードするには次のクエリを実行してください。

注:CSVファイルの絶対パスを追加してください

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

すべてが終わったら。 CSVからテーブルにデータを正常にエクスポートしました

Md. Nashir Uddin picture
2016年10月20日
17

構文:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] 
[LINES[TERMINATED BY 'string']] 
[IGNORE number {LINES | ROWS}]

この例を参照してください。

LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
krunal panchal picture
2017年02月17日
10

データベースに1分で7000000を超えるバルクレコードを挿入します(計算付きの超高速クエリ)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ');
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRPとRRP_nlとRRP_blはcsvに含まれていませんが、計算され、挿入後に計算されます。

Kikoz picture
2016年10月07日
2

WindowsシェルからLOAD DATA LOCAL INFILEしていて、 OPTIONALLY ENCLOSED BY '"'を使用する必要がある場合、文字を適切にエスケープするには、次のような操作を行う必要があります。

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out
Mohammad Arshi picture
2017年10月08日
2

xamppとphpmyadminを使用しているとしましょう

ファイル名「ratings.txt」テーブル名「ratings」とデータベース名「movies」があります

xamppが「C:\ xampp \」にインストールされている場合

「C:\ xampp \ mysql \ data \ movies」フォルダにある「ratings.txt」ファイルをコピーします

LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

ローカルホストでこれを行っている場合、これがエラーを省略するのに役立つことを願っています

Jorge T picture
2016年10月06日
0

csvまたはテキストファイルからデータをロードできます。 テーブルのレコードを含むテキストファイルがある場合は、それらのレコードをテーブル内にロードできます。 たとえば、各行が各列の値を持つレコードであるテキストファイルがある場合、この方法でレコードをロードできます。

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

--Windowsの例

LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'; 
Carlos Garcia picture
2017年08月30日
0

エラーコード:1290が発生しました。MySQLサーバーは--secure-file-privオプションを指定して実行されているため、このステートメントを実行できません。

これは、wampserver 3.0.664ビットを使用するWindows8.164ビットで機能しました。

C:\ wamp64 \ bin \ mysql \ mysql5.7.14からmy.iniファイルを編集しました

エントリsecure_file_privc:\ wamp64 \ tmp \(またはここにあるディレクトリ)を削除します

すべてを停止し(Wampを終了するなど)、すべてを再開しました。 次に、C:\ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recurにあるcvsファイルをパントします(最後のディレクトリはデータベース名です)

LOAD DATA INFILE'myfile.csv 'を実行しました

INTOTABLEの卒業生

'、'で終了するフィールド

'"'で囲まれています

'\ r \ n'で終了する回線

1行無視

...そしてVOILA !!!

Hozayfa picture
2018年11月26日
0

あなたはこのように挿入を試みることができます:

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);