MySQL でCSVファイルからレコードを取り込んでみたよ

投稿者: | 2011/01/24

MySQL でCSVファイルからレコードを取り込む時は、LOAD DATA INFILE を使う。

LOAD DATA INFILE "file_path/file_name" 
IGNORE INTO TABLE table_name 
FIELDS TERMINATED BY ";" 
ENCLOSED BY "'"  
LINES TERMINATED BY "rn" 
IGNORE 1 LINES 
(@field1, @field2, @field3, @field4) 
SET 
db_field1=@field1, db_field2=@field2, db_field3=@field3, db_field4=@field4, db_field5=null 

db_field5 = null は何?

セットする値が無いフィールドはnullを放り込むことで既定値を適用させることができる。

取り込みたくない値はどうするか?

SET以下の代入を行わず、nullをセットしておけば良い。
例:db_field1 に @field2, db_field2 に @field4, db_field3 ~ db_filed5 は既定値をセット。 @field1, @field3 は不要の場合。

SET db_field1=@field2, db_field2=@field4, db_field3=null, db_field4=null, db_field5=null 

外部キーに注意

インポートしようとすると「Cannot add or update a child row: a foreign key constraint fails」とエラーが出て、取り込めない場合がある。
これは、メッセージの通り、外部キー制約違反が発生しているわけだが、
そんなもの気にせず取り込みたい場合は、LOAD DATA 実行前に、以下の魔法の呪文を唱えておくと、外部キー制約を無視してくれるようになる。

SET FOREIGN_KEY_CHECKS=0;

元に戻す(SET FOREIGN_KEY_CHECKS=1)のを忘れずに。

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください