2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【MySQL】CSVからサクッとインポートしたかったけどハマった件

Last updated at Posted at 2020-05-25

何をしたかったの?

いまのお仕事のテスト用に、DBに値をサクッと登録したかった。

そのために使えるCSV生成→DB登録機能は既に実装されていたが、
テスト環境でやっててもそのファイルを使ったらお客さんに通知が飛ぶし、
かといって、通知する部分をコメントアウトしたりってのも少し手間…

なんて思って、【やったことなかったけど】CSVから直接インポートしちゃえばよくね???
という軽い気持ちで試したら存外ハマったので、備忘録としてまとめていく。

この記事で紹介すること

MySQLに、CLIからコマンド打ってCSVをインポートする方法。
ハマったところから紹介するので、答えだけ知りたい方は、最後の章だけ見てもらえれば。

紹介していく。

まず手元にCSVを用意する。

そして、MySQLにログインし、インポート先のDBを選択。
以下のコマンドを打つ。

MySQL
$ load data local infile "/Users/[userName]/Import.csv" \
into table [tableName] \
fields terminated by ',' \
optionally enclosed by '"';

ちなみに、
terminatedは区切り文字、
optionally enclosedは囲い文字
となっているので、環境次第で変える必要がある。

実行結果は…

実行結果
ERROR 1148 (42000): The used command is not allowed with this MySQL version

ググった結果、local_infileの設定が変なのではないか?とのことなので、
以下のコマンドを実行。(同じくMySQL内)

MySQL
mysql> SELECT @@local_infile;
実行結果
+----------------+
| @@local_infile |
+----------------+
|              1 |
+----------------+
1 row in set (0.00 sec)

このファイルの値が、先程のコマンドの権限?的なところを担っているらしいのだが、
僕はそもそも1だった。

ここが0の場合は、1に変えて再実行してみるのが良いかも。
それでもダメだったら、以下のコマンドを試してみると良いかも。

ではどうするか

MySQLにログインする際に、--local_infile=1を指定する。

$ mysql -u $userName -p -h $IP -P $port --local_infile=1

これでMySQLのログインパスワードを入力し、MySQLにログインできたら、
インポート先のデータベースを選択し、先程のコマンドをもう一度ためす。

MySQL
$ load data local infile "/Users/[userName]/Import.csv" \
into table [tableName] \
fields terminated by ',' \
optionally enclosed by '"';
実行結果
Query OK, 216 rows affected, 216 warnings (0.01 sec)
Records: 216  Deleted: 0  Skipped: 0  Warnings: 216

なんかやたらWarnings出てますが、phpMyAdminで値を確認したところ、
問題なく登録されていた。

こんなしょっぱい経験が、どなたかの役に立つことがもしあれば嬉しいです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?