猫型iPS細胞研究所

Windows、Linux、iOS、DB、Network

DataBase MySQL

MySQL load dataでcsvをインサートする

投稿日:2013年2月6日 更新日:

かなり高速でinsertしてくれます。

使い方

MySQLにログインして、データベースを指定して実行します。

mysql> use [データベース]
mysql> load data local 
infile '/xxx/test.csv' 
into table [テーブル名] 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n';

ERROR 1045

ERROR 1045 (28000): Access denied for user ‘test’@’localhost’ (using password: YES)
の場合はmysqlのユーザーにファイル権限がありません。

のようなエラーがでる場合があります。

①MySQLのファイル権限を確認します。(linuxではありません)

mysql> select user,file_priv from mysql.user;
+--------+-----------+
| user   | file_priv |
+--------+-----------+
| root   | Y         |
| test   | N         |
+--------+-----------+
2 rows in set (0.00 sec)
もしなければ追加します。
mysql> grant file on *.* to test@localhost;
Query OK, 0 rows affected (0.00 sec)

②linuxのディレクトリとファイルのアクセス権限を確認します

#chmod 755 test.csv
だめらならファイルの入っているディレクトリにも
#chmod 755 dir

③ローカルキーワードの確認
データベースサーバー上にcsvファイルがある場合でもlocalキーワードが必用です。
mysql> load data local infile ‘/xxx/test.csv’ into table [テーブル名] fields terminated by ‘,’ enclosed by ‘”‘ lines terminated by ‘\n’;

成功したら下記のように表示されるはずです。

mysql> use [データベース]
mysql> load data local infile '/xxx/test.csv' into table soumu fields terminated by ',' enclosed by '"' lines terminated by '\n';
Query OK, 1800 rows affected (0.04 sec)
Records: 1800  Deleted: 0  Skipped: 0  Warnings: 0

データは追加されていくので、同じファイルを何度もインポートしていると、キーが重複してSkippedが発生するかもしれません。

[補足]insertを高速にする

複数のinsert分をまとめることで早くなります。

mysql>INSERT INTO table (id,name) VALUES(1,'本'),(2,'たまご'),(3,'猫');

Gooleアドセンス用336

Gooleアドセンス用336

-DataBase, MySQL

執筆者:

関連記事

sqlserver

SQL Server Management Studio の「上位200行の編集」を変更したい

恐らく私が十分に使用できていないだけで、機能はたくさんありそうなSQL Server Management Studio。最近新しいものに入れ替えたら(OS毎再インストールするハメになったのですが)、 …

mysql

MySQLの時間のフォーマット

MySQLのdatetime型はそのままSELECTすると、 2013-05-15 13:45:59 のように表示されてしまいます。 yyyy-mm-ddではなく、yyyy/mm/dd がいい場合もあ …

select insert

私は以前SQLの順番にinsert selectと呼んでいて、笑われたことがあります。 select insertだ!と当時の上司に言われました。 なるほど、副問い合わせのselectが実行されて、そ …

mysql

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.x.xx’ (13)

MySQL ERROR: Can’t connect to MySQL server on ‘xxx.xxx.xxx.xxx’ (13) はSELinuxによる接続 …

mysql

MySQLのバイナリログを見てスレーブ停止の原因を調査する

以前スレーブ側の更新がとまっていることに気付きました :x001: その時のトラブルシューティングの手順です。 INDEX1 1.スレーブ側で、SlaveS tatusを確認する2 2.スレーブ側のロ …