【MySQL】Excelデータをインポート

もくじ

エクセルを準備

まずは、インポートするためのエクセルを準備します。

f:id:bonoponz:20210114190024p:plain

仮に中身がこのようなデータとして話を進めます。

インポート先のテーブルを用意

  • database名;test_db
  • table名;sample
  • カラム
    • id
    • nama
    • age

エクセルにクエリを生成

D列に以下の関数を入力します。idは自動採番(autoincrement)になっている想定で省いています。

="INSERT INTO sample(name,age) VALUES('"&B2&"',"&C2&");"

f:id:bonoponz:20210114191349p:plain

するとクエリが生成されます。

このとき、ダブルクォーテーションなどの記述がややこしいので間違えないようにしましょう。今回の例でいうとageは数字なのでクォーテーションがいりません。

しかしカラムが文字列であればクォーテーションが必要になってきます。ageカラムを文字列のaddressカラムに変更してみます。

f:id:bonoponz:20210114192111p:plain

="INSERT INTO sample(name,age) VALUES('"&B2&"','"&C2&"');"
  • 数字 f:id:bonoponz:20210114192033p:plain

  • 文字列 f:id:bonoponz:20210114192036p:plain

MySQLでクエリ実行

まずはデータベースを選択します。

mysql> use test_db;

データベースを選択していないと、エラーが返ってくると思います。

ERROR 1046 (3D000): No database selected

もしエラーが出たら、into tableの後のテーブル名の指定時にデータベース名.テーブル名とするか、先にuse [データベース名];を実行しておきます。今回は後者で進めます。

あとは先ほど生成したクエリを実行するだけです。

mysql> INSERT INTO   sample(name,age) VALUES('相川',12);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample(name,age) VALUES('井上',33);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample(name,age) VALUES('内田',43);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample(name,age) VALUES('江本',23);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO sample(name,age) VALUES('大木',42);
Query OK, 1 row affected (0.00 sec)

これで投入完了です。

確認

mysql> select * from sample;
+----+--------------+------------+------------+------------+
| id | name        | age        | created_at | updated_at |
+----+--------------+------------+------------+------------+
|  1 | 相川       | 12        | NULL       | NULL       |
|  2 | 井上       | 33        | NULL       | NULL       |
|  3 | 内田       | 43        | NULL       | NULL       |
|  4 | 江本       | 23        | NULL       | NULL       |
|  5 | 大木       | 42        | NULL       | NULL       |
+----+--------------+------------+------------+------------+

完成!

まとめ

今回のようにインポートするデータが少なければこんなことしなくても…と思いますが、1000件、10000件ともなってくるとこのように生成しておけば、エクセルでコマンド列をコピーしてMySQLにペーストするだけなのでとても楽チンです。

注意点としては、セミコロン(;)を忘れないようにしましょう。セミコロンがないと終了コマンドを認識してくれないのでコピペではうまくいかなくなります。

参考URL

【MySQL】Excelシートのデータから一括でSQL文を作成する方法|もりさんのプログラミング手帳