サーチ…


構文

  1. LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
  2. INTO TABLE tbl_name
  3. [CHARACTER SET charset]
  4. [{FIELDS | COLUMNS} ['string'によって終了しました] [[OPTIONALLY] 'ENCLOSED BY' char ']]
  5. [LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
  6. [無視する数{線| ROWS}]
  7. [(col_name_or_user_var、...)]
  8. [SET col_name = expr、...]

LOAD DATA INFILEを使用して大量のデータをデータベースにロードする

データベースにロードするCSVが ';'で区切られていると仮定して、次の例を考えてみましょう。

1;max;male;manager;12-7-1985
2;jack;male;executive;21-8-1990
.
.
.
1000000;marta;female;accountant;15-6-1992

挿入するテーブルを作成します。

CREATE TABLE `employee` ( `id` INT NOT NULL ,
                          `name` VARCHAR NOT NULL, 
                          `sex` VARCHAR NOT NULL ,
                          `designation` VARCHAR NOT NULL ,
                          `dob` VARCHAR NOT NULL   );                              

次のクエリを使用して、そのテーブルに値を挿入します。

LOAD DATA INFILE 'path of the file/file_name.txt' 
INTO TABLE employee
FIELDS TERMINATED BY ';' //specify the delimiter separating the values
LINES TERMINATED BY '\r\n'
(id,name,sex,designation,dob)

日付形式が非標準の場合を考えてみましょう。

1;max;male;manager;17-Jan-1985
2;jack;male;executive;01-Feb-1992
.
.
.
1000000;marta;female;accountant;25-Apr-1993

このように挿入する前に、 dobカラムのフォーマットを変更することができます。

LOAD DATA INFILE 'path of the file/file_name.txt' 
INTO TABLE employee
FIELDS TERMINATED BY ';' //specify the delimiter separating the values
LINES TERMINATED BY '\r\n'
(id,name,sex,designation,@dob)
SET date = STR_TO_DATE(@date, '%d-%b-%Y');

LOAD DATA INFILEのこの例では、使用可能な機能のすべてを指定していません。

ここでLOAD DATA INFILEの参考文献を見ることができます

CSVファイルをMySQLテーブルにインポートする

次のコマンドは、CSVファイルを、同じ列を持つMySQLテーブルにインポートして、CSV引用およびエスケープルールを遵守します。

load data infile '/tmp/file.csv'
into table my_table
fields terminated by ','
optionally enclosed by '"'
escaped by '"'
lines terminated by '\n'
ignore 1 lines; -- skip the header row

データを重複してロードする

LOAD DATA INFILEコマンドを使用して既存のデータを表に取り込むと、重複によってインポートが失敗することがよくあります。この問題を克服する方法はいくつかあります。

LOAD DATA LOCAL

このオプションがサーバーで有効になっている場合は、サーバーではなくクライアントコンピューターに存在するファイルを読み込むために使用できます。副作用は、一意の値の重複行が無視されることです。

LOAD DATA LOCAL INFILE 'path of the file/file_name.txt' 
INTO TABLE employee

LOAD DATA INFILE 'fname' REPLACE

replaceキーワードを使用すると、一意のキーまたは主キーが重複すると、既存の行が新しいものに置き換えられます

LOAD DATA INFILE 'path of the file/file_name.txt' 
REPLACE INTO TABLE employee

LOAD DATA INFILE 'fname' IGNORE

REPLACEとは反対に、既存の行は保存され、新しい行は無視されます。この動作は、上記のLOCALと同様です。ただし、ファイルはクライアントコンピュータ上に存在する必要はありません。

LOAD DATA INFILE 'path of the file/file_name.txt' 
IGNORE INTO TABLE employee

中間テーブルを介してロード

場合によっては、すべての重複を無視または置換することは理想的な選択肢ではないかもしれません。他の列の内容に基づいて決定する必要があるかもしれません。その場合、最善の選択肢は、中間テーブルにロードしてそこから転送することです。

INSERT INTO employee SELECT * FROM intermediary WHERE ...

インポート・エクスポート

インポート

SELECT a,b,c  INTO OUTFILE 'result.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM table;

輸出する

LOAD DATA INFILE 'result.txt' INTO TABLE table;


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow