CSVファイルからMysqlに20000行のデータをインポートしています。
CSV内の列は、MySQLテーブルの列とは順序が異なります。 MySQLテーブルの列に対応する列を自動的に割り当てる方法
実行したとき
LOAD DATA INFILE'abc.csv' INTO TABLE abc
このクエリはすべてのデータを最初の列に追加します。
Mysqlにデータをインポートするための自動構文を提案してください。
LOAD DATA INFILEコマンドを使用して、csvファイルをテーブルにインポートできます。
このリンクを確認してください MySQL - LOAD DATA INFILE 。
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
キーワードを使用するとセキュリティ上のリスクがあり、MySQL 8.0以降ではLOCAL
機能はデフォルトでFalse
に設定されています。あなたはエラーが表示されるかもしれません:
エラー1148:このMySQLバージョンでは、使用されたコマンドは許可されていません
あなたは docsの指示 に従ってそれを上書きすることができます。そのような上書きはセキュリティの問題を解決するのではなく、むしろあなたがリスクを認識していると思っているという単なる認識であることに注意してください。
おそらく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;
ファイルをインポートする前に、以下を準備する必要があります。
次のような表があるとします。
以下のクエリを使用してテーブルを作成します。
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ファイルは適切な形式でフォーマットされていなければなりません。
すべてがうまくいったら.. LOAD DATA FROM CSV FILEに以下のクエリを実行してください。
注: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からテーブルにデータを正常にエクスポートしました
構文:
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;
データベースに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
')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1;
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');
RRPとRRP_nlとRRP_blはcsvにはありませんが、それを計算して挿入した後です。
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;
Localhostでこれを行っている場合、これがエラーを省略するのに役立つことを願います。
エラーコード1290が表示されました。MySQLサーバーは--secure-file-privオプションで実行されているため、このステートメントを実行できません。
これは私のためにwampserver 3.0.6 64bitを使ってWindows 8.1 64 bitで動きました。
My.iniファイルをC:\ wamp64\bin\mysql\mysql5.7.14から編集しました
エントリsecure_file_priv c:\ wamp64\tmp \を削除します。
Wampなどを終了してすべてを停止し、すべてを再起動しました。それからC:\ wamp64\bin\mysql\mysql 5.7.14\data\u242349266_recurの私のcvsファイルをパントして下さい(最後のディレクトリは私のデータベース名です)
lOAD DATA INFILE 'myfile.csv'を実行しました
INTO TABLEの卒業生
'、'で終了するフィールド
「」で囲まれています
'\ r\n'で終了する行
IGNORE 1ライン
...そしてVOILA !!!
あなたはcsvまたはテキストファイルからデータをロードすることができます。テーブルのレコードを含むテキストファイルがある場合は、それらのレコードをテーブル内に読み込むことができます。たとえば、各行が各列の値を持つレコードであるテキストファイルがある場合は、この方法でレコードを読み込むことができます。
id //field 1
name //field2
1,peter
2,daniel
...
- 窓の例
LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n';
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
あなたはこのように挿入しようとすることができます:
LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);