MySQLのLOAD DATA INFILEを稀によく使うので、使い方をメモ
よく使うやつ
LOAD DATA INFILE '/tmp/foo.csv' INTO TABLE foo FIELDS TERMINATED BY ',' IGNORE 1 LINES;
csvを読み込むにはFIELDS TERMINATED BY ','が必要
LOAD DATA INFILE
は、タブ区切りがデフォルトになっているらしい。カンマ区切りであるcsvを読み込むにはFIELDS TERMINATED BY ','
でカンマ区切りである事を指定します。
1行目にフィールド名を入れてあるので、それを無視する
IGNORE 1 LINES
を付けることで、先頭1行を無視することが出来ます。インポート用のcsvを作る際、フィールド名がないと分かりにくいし、事後に修正して再利用することを考えると、インポートする時だけ消すのも面倒くさいので。
主キーであるidも必要
インポートするcsvには、全フィールドが順番どおりに載っている必要があります。auto_incrementするから主キーはいらないと思っても、1列目に主キーを載せないとです。ただ、数値を書かずに空欄にしておいたらauto_incrementは働くので、項目を置いておくだけ*1です。
なお、created_atやupdated_atの様な、テーブルの最後にあるフィールドに、データを入れなくても良いと言う場合、項目数が足りない分には問題ないです。多分warningsにはなると思いますが。
warningsを確認する
SHOW warnings;
LOAD DATA INFILE
を使うと、ほぼ必ず何かしらのwarningsは出る*2と思いますが、確認したいときもあります。LOAD DATA INFILE
実行直後にのみ、これで確認できます。