サイズの大きいcsvをmysqlのDBにサクッと登録したい

5万件近くを記述してあるcsvデータをDBに入れたかったのですが、
「csvをダンプして一行ずつinsertして…」
ってやるには途方も無い時間がかかっちゃいますよね

そんな時に使うのが
LOAD DATA INFILE」!

csvファイルごとアップして
処理することで高速で数万件をDBに登録することができるわけです。

LOAD DATA LOCAL INFILE csvファイルパス REPLACE INTO TABLE `テーブル名` fields terminated by ‘,’ enclosed by ‘”‘

こんなかんじです。

今回はレンタルサーバー(ロリポップ)利用で
phpでcsvファイルをアップロード→データベースへ登録
って流れに対応したかったので上記sql文の

LOCAL

がミソになります。
また、

REPLACE

を指定しているのは
アップロードするたびに、同じキーをもつデータを上書きするためです。

fields terminated by ‘,’ enclosed by ‘”‘

この部分はカンマ区切りでダブルクォートで囲われてるデータを扱いますよって意味です。

いろいろオプションがありますので
興味ある方は調べてみてください。

今回は以上で無事完了しましたが、
レンタルサーバーによってはphpからLOAD DATAしても
うまくいかない場合も多いみたいですね。

レンタルサーバーの場合はDBの場所がphpを実行しているローカルと異なるケースがほとんどなので
ローカルファイルへのアクセスがうまくいかないようです。
(さくらインターネットなどはそうらしい)

その場合はsshで直接コマンドラインをうつなどの
方法をとるしかないようですね。

もし、上記がうまくいかないで
どうしてもphpから実行したい方は「mysqlimport」を調べると幸せになれるかも、、、