かなり高速で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のユーザーにファイル権限がありません。
のようなエラーがでる場合があります。
①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,'猫');