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)のを忘れずに。