こんなコマンドあったんだ てっきりcsv読み込んでforeachやるしかないって思ってた
CSVファイルを用意
例えばこんなやつ
100,hoge,hogetaro@gmail.com 101,piyo,piyoko@yahoo.com.jp 102,fuga,huganosuke@hotmail.com
tableの作成
create table fromcsv(id int primary key auto_increment, num int not null, name varchar(100) not null, email varchar(100) not null);
以下のようになるはず
+-------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | num | int(11) | YES | | NULL | | | name | varchar(100) | NO | | NULL | | | email | varchar(100) | NO | | NULL | | +-------+--------------+------+-----+---------+----------------+
idはCSVに元々ないけど便宜上用意する(別に無くても動作はする)
読み込む
LOAD DATA LOCAL INFILE "/home/user/test.csv" INTO TABLE `fromcsv` FIELDS TERMINATED BY ',' (num, name, email);
- INTO TABLE `fromcsv` 出力先のtable名を指定
- FIELDS TERMINATED BY ',' CSVがどの文字列で区切られているか(デフォルトは\t)
- (num, name, email) 出力先テーブルのどのコラムに格納するか 今回はid不要なためそれ以外を記述
エラーの確認
多少は出る
SHOW warnings;
確認
うまくいけば以下のようになっているはず
mysql> select * from fromcsv; +----+-----+------+------------------------+ | id | num | name | email | +----+-----+------+------------------------+ | 1 | 100 | hoge | hogetaro@gmail.com | | 2 | 101 | piyo | piyoko@yahoo.com.jp | | 3 | 102 | fuga | huganosuke@hotmail.com | +----+-----+------+------------------------+
データが崩れて入る場合
たいていWindowsのせい
The used command is not allowed with this MySQL versionって怒られる
mysql --local-infile -u root -p
で通った