MySQL
LOAD DATA INFILE
サーチ…
構文
- LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
- INTO TABLE tbl_name
- [CHARACTER SET charset]
- [{FIELDS | COLUMNS} ['string'によって終了しました] [[OPTIONALLY] 'ENCLOSED BY' char ']]
- [LINES [STARTING BY 'string'] [TERMINATED BY 'string']]
- [無視する数{線| ROWS}]
- [(col_name_or_user_var、...)]
- [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;